Unity 18

(Unity) 유니티에서의 벡터 활용

Vector 유니티에서 벡터는 게임 오브젝트의 속도와 위치, 방향, 회전, 크기 등 온갖 종류의 계산에 사용됩니다. 따라서 벡터를 이해하는 것은 게임 개발에서 매우 중요합니다. 벡터의 내적을 통해서 두 물체 사이의 각도가 얼마만큼 벌어졌는지, 벡터의 외적을 통해서 어떤 표면에 수직인 방향도 알 수 있습니다. 유니티는 Vector2, Vector3, Vector4 타입을 지원합니다. 새로운 벡터값을 만들기 위해서는 다음과 같은 형태로 생성자를 호출합니다. new Vector2(x,y); new Vector3(x,y,z); 예제 Vector3 a = new Vector3(1, 2, 3); //(1, 2, 3)을 (10, 20, 30)으로 수정 a.x = 10; a.y = 20; a.z = 30; 이러한 Ve..

Unity 2022.08.21

(Unity) Text, TextMeshPro 사용하기

유니티 공부 중 다른 예제나 책에서는 Hierarchy - UI - Text를 사용하는데 최근 버전의 유니티를 사용한다면 UI를 눌렸을 때 Text가 안 보이고 TextMeshPro만 존재할 것입니다. -> Hierarchy - UI - Legacy - Text 로 사용가능합니다. Text가 아닌 TextMeshPro를 사용한다면, 기존 Text와 TextMeshPro는 약간의 차이가 있지만 조금만 수정하면 되기 때문에 어렵지 않습니다. TextMeshPro의 사용을 위해서는 맨 위에 using TMPro를 추가하고, 예제에서 public Text scoreText 와 같이 나와있다면 -> public TextMeshProUGUI scoreText 로 수정한다면 문제없이 사용 가능합니다.

Unity 2022.08.19

(Unity) 점수 저장, 불러오기 or 최고점수 나타내기 - PlayerPrefs

PlayerPrefs는 간단한 방식으로 어떤 수치를 로컬(프로그램을 실행 중인 현재 컴퓨터)에 저장하고 나중에 다시 불러오는 메서드를 제공하는 유니티에 내장된 클래스입니다. PlayerPrefs는 키-값 단위로 데이터를 로컬에 저장합니다. 만약 float 값을 저장하고자 할 경우 PlayerPrefs.SetFloat() 메서드를 사용하며 다음과 같이 입력으로 키와 키에 대응하는 값을 받습니다. PlayerPrefs.SetFloat(string key, float value); 예를 들어 키로 Gold, 값으로 실수형 100을 저장하고자 할 경우 PlayerPrefs.SetFloat("Gold", 100f)과 같이 저장할 수 있습니다. 또한 float gold = PlayerPrefs.GetFloat("G..

Unity 2022.08.19

(Unity) Time.deltaTime

초당 프레임은 컴퓨터 성능에 따라 다릅니다. 따라서 직전 Update() 실행과 현재 Update() 실행 사이의 시간 간격은 고정되어 있지 않습니다. Update() 실행 사이의 간격을 알기 위해서는 내장 변수 Time.deltaTime을 사용하는데, 여기에는 이전 프레임과 현재 프레임 사이의 시간 간격이 자동으로 할당됩니다. 즉, 1초에 60프레임의 속도로 갱신하는 컴퓨터에서 Time.deltaTime은 1/60 값이며 1초에 120프레임의 속도로 갱신하는 컴퓨터에서 Time.deltaTime은 1/120 값이 됩니다. 따라서 Update() 메서드에서 어떤 변수에 Time.deltaTime 값을 계속해서 누적하면 성능에 관계없이 특정 시점으로부터 시간이 얼마나 흘렀는지 표현할 수 있습니다.

Unity 2022.08.19

(Unity) target 삼을 대상 찾아서 할당하기, FindObjectOfType()

FindObjectOfType() 메서드는 꺾쇠 에 어떤 타입을 명시하면 씬에 있는 모든 오브젝트를 검색해서 해당 타입의 오브젝트를 가져옵니다. Player 오브젝트에 PlayerController라는 컴포넌트가 있을 경우 FindObjectOfType()를 사용해서 씬에서 PlayerController 컴포넌트를 가진 오브젝트를 찾아낼 수 있습니다. 이를 이용해 다음과 같이 target으로 삼을 목표물의 transform을 할당할 수도 있습니다. target = FiindObjectOfType().transform; 즉, 플레이어를 향해 탄알을 발사한다고 할 경우 위와 같이 target으로 플레이어의 transform을 가져오면 됩니다. -- FindObjectOfType()와 FindObjectsOf..

Unity 2022.08.19

(Unity) 게임 오브젝트 간의 충돌 - OnCollision, OnTrigger

Unity에서 콜라이더를 가진 게임 오브젝트들이 서로 충돌했다고 했을 때, 게임 오브젝트는 자신이 충돌했다는 사실을 모릅니다. 그 대신 충돌했음을 알려주는 메시지가 충돌한 각 오브젝트에 보내져 해당 오브젝트의 컴포넌트들은 충돌 사실을 알게 되고 충돌에 대응하는 메서드를 실행합니다. 게임 오브젝트와 컴포넌트는 충돌 종류에 따라 OnCollisionEnter 혹은 OnTriggerEnter 메시지를 받습니다. OnCollision 계열 -> 일반적인 콜라이더를 가진 두 게임 오브젝트가 충돌할 때 자동으로 실행됩니다. 충돌한 두 콜라이더는 서로 통과하지 않고 밀어냅니다. OnCollisionEnter : 충돌한 순간 OnCollisionStay : 충돌하는 동안 OnCollisionExit : 충돌했다가 분리..

Unity 2022.08.19

(Unity) GetAxis(), GetKey(), 입력 매니저?

Input.GetAxis() 메서드에 입력하게 되는 Horizontal 축과 Vertical 축은 무엇일까요? 대부분의 조작 키 설정 창은 '기능의 이름'과 '매핑된 키' 쌍으로 구성됩니다. ex) 발사 -> 마우스 왼쪽 버튼 점프 -> 스페이스바 다음과 같이 매핑된 키를 마음대로 변경할 수도 있습니다. ex) 발사 -> 마우스 오른쪽 버튼 점프 -> 엔터 이것이 가능한 이유가 입력 장치의 구체적인 식별자를 사용하지 않기 때문입니다. 코드에서 if ( 마우스 왼쪽 버튼을 누름) { //총 발사 } 위 방식과 같은 코드의 경우 발사 키를 바꿀 수 없으나 if ("발사"에 대응되는 버튼을 누름){ //총 발사 } 위 방식은 '발사'라는 입력 이름에 대응되는 버튼을 감지하기 때문에 조작 키를 바꿀 수 있습니다..

Unity 2022.08.18

(Unity) Rigidbody의 AddForce()와 velocity 차이

AddForce() 메서드는 힘을 점진적으로 증가시키므로 AddForce() 메서드를 사용할 경우 관성이 적용되게 됩니다. 하지만 Rigidbody의 velocity를 수정하는 것은 이전 속도를 지우고 새로운 속도를 사용합니다. 따라서 관성을 무시하고 속도가 즉시 변경됩니다. -> 즉, 관성이 필요한 움직임의 경우 Rigidbody.Addforce(), 관성이 필요없는 부드러운 조작감을 위해서는 Rigidbody.velocity를 수정합니다.

Unity 2022.08.18