방명록
- 유니티 게임개발 입문 #22023년 09월 05일 21시 13분 55초에 업로드 된 글입니다.작성자: noun06
[게더 클론 개인 프로젝트]
캐릭터 이동
- New Input System을 사용하여 WASD를 통해 플레이어의 이동 제어.
- 키보드 입력값에 따라 x축 반전을 통해 캐릭터의 방향 바꾸기.
//PLayer.cs using UnityEngine.InputSystem; public class Player : MonoBehaviour { [SerializeField] private float _speed; private Rigidbody2D _rigidbody; private Vector2 _movementInput; private bool isFlipped = false; private void Awake() { _rigidbody = GetComponent<Rigidbody2D>(); } private void FixedUpdate() { _rigidbody.velocity = _movementInput * _speed; } private void OnMove(InputValue inputValue) { _movementInput = inputValue.Get<Vector2>().normalized; if (_movementInput.x > 0 && isFlipped) { FlipCharacter(); } else if (_movementInput.x < 0 && !isFlipped) { FlipCharacter(); } } private void FlipCharacter() { transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z); isFlipped = !isFlipped; } }
이름 입력 시스템
- 메인메뉴 씬의 사용자가 입력한 이름을 게임 씬으로 넘겨주어 UI로 보여주기.
//Player.cs public class Player : MonoBehaviour { //... public static string playerNameStr; public TMP_Text playerName; public TMP_Text playerName2; private void Awake() { playerName.text = playerNameStr; playerName2.text = playerNameStr; } //... }
- StartGame()함수는 "방 입장" 버튼에 붙여서 다음 씬 로드와 동시에 사용.
//MainMenu.cs public class MainMenu : MonoBehaviour { public TMP_InputField playerName; //... public void StartGame() { Player.playerNameStr = playerName.text; Application.LoadLevel(1); //... } }
캐릭터 선택 시스템
- 사용할 캐릭터들을 public 배열로 선언 후 각 요소에 번호를 할당.
- Next/Back 버튼 클릭 시 해당 번호에 맞는 프리팹만을 활성화.
//MainMenu.cs public class MainMenu : MonoBehaviour { public GameObject[] characters; public int selectedCharacter = 0; public void NextCharacter() { characters[selectedCharacter].SetActive(false); selectedCharacter = (selectedCharacter + 1) % characters.Length; characters[selectedCharacter].SetActive(true); } public void PreviousCharacter() { characters[selectedCharacter].SetActive(false); selectedCharacter--; if(selectedCharacter < 0) { selectedCharacter += characters.Length; } characters[selectedCharacter].SetActive(true); } public void StartGame() { //... PlayerPrefs.SetInt("selectedCharacter", selectedCharacter); } }
- PlayerPrefs를 사용하여 선택된 캐릭터를 저장하여 게임 씬에 Instantiate하여 로드.
//LoadCharacter.cs public class LoadCharacter : MonoBehaviour { public GameObject[] characterPrefabs; public Transform spawnPoint; private void Start() { int selectedCharacter = PlayerPrefs.GetInt("selectedCharacter"); GameObject prefab = characterPrefabs[selectedCharacter]; GameObject clone = Instantiate(prefab, spawnPoint.position, Quaternion.identity); clone.SetActive(true); } }
시간 표시
- DataTime.Now.ToString() 메서드를 사용하여 현재 날짜 및 시간을 보여줌.
//CurrentTime.cs public class CurrentTime : MonoBehaviour { [SerializeField] TMP_Text currentTime; private void Update() { currentTime.text = DateTime.Now.ToString(); } }
NPC 대화
- OnTrigger2D를 통해 플레이어가 특정한 구역과 닿아있을 경우 대화창 활성화.
//ShowUI.cs public class ShowUI : MonoBehaviour { public GameObject uiObject; private void Start() { uiObject.SetActive(false); } private void OnTriggerStay(Collider other) { if (other.tag == "Player") { uiObject.SetActive(true); gameObject.SetActive(false); } } private void OnTriggerExit(Collider other) { if (other.tag == "Player") { uiObject.SetActive(false); } } }
다음글이 없습니다.이전글이 없습니다.댓글