벡터의 속기
Vector3 타입에는 '속기'라는 미리 만들어진 편리한 변수들이 있습니다. 자주 사용되는 Vector3 값은 속기를 사용해 다음과 같은 형태로 즉시 생성할 수 있습니다.
예제
Vector3 position = Vector3.up;
위 코드는 Vector3 position = new Vector3(0, 1, 0);과 같은 동작을 합니다.
https://step-forward.tistory.com/10?category=956734 (벡터의 활용 포스팅)
이전 벡터의 활용 포스팅에서 벡터값을 생성할 때 new Vector3(x, y, z)과 같은 형태의 생성자를 만든다고 했는데, 벡터의 속기를 활용하여 편하게 자주 사용되는 Vector3 값을 생성할 수 있습니다.
Vector3의 속기
Vector3.forward : new Vector3(0, 0, 1);
Vector3.back : new Vector3(0, 0, -1);
Vector3.right : new Vector3(1, 0, 0);
Vector3.left : new Vector3(-1, 0, 0);
Vector3.up : new Vector3(0, 1, 0);
Vector3.down : new Vector3(0, -1, 0);
이들은 모두 크기가 1인 방향벡터라는 점에 유의해야 합니다.
Transform 의 방향
트랜스폼 컴포넌트를 표현하는 Transform 타입은 자신의 앞, 뒤, 오른쪽 등을 나타내는 방향벡터를 즉시 접근할 수 있는 변수들을 제공합니다.
Transform 타입의 방향
transform.forward : 자신의 앞쪽을 가리키는 방향벡터
transform.right : 자신의 오른쪽을 가리키는 방향벡터
transform.up : 자신의 위쪽을 가리키는 방향벡터
여기서 뒤쪽, 왼쪽, 아래쪽에 관한 변수는 따로 없지만 -1을 곱하여 각각 표현할 수 있습니다.
Translate() 메서드를 통한 평행이동
평행이동은 Transform 타입이 제공하는 Translate() 메서드를 통해 실행할 수 있습니다. Translate() 메서드에 의한 평행이동은 전역 공간이 아니라 지역 공간을 기준으로 이루어집니다. 예를 들어 transform.Translate(0, 0, 1);을 실행하면 자신의 앞쪽(z) 방향으로 1만큼 움직이지만, 게임 월드의 앞쪽과는 다른 방향으로 움직일 수 있게 됩니다.
하지만 원한다면 평행이동 기준을 전역 공간으로 선택할 수 있습니다.
예제
transform.Translate(new Vector3(0, 1, 0), Space.World); //전역 공간 기준 평행이동
transform.Translate(new Vector3(0, 1, 0), Space.Self); //지역 공간 기준 평행이동
예제처럼 Translate() 메서드는 두 번째 값으로 Space 타입을 받아 평행이동의 기준을 전역 공간(Space.World)으로 할 지, 지역 공간(Space.Self)으로 할 지 지정할 수 있습니다.
마지막으로 벡터의 속기와 Translate() 메서드를 활용한 내용을 정리해보면 다음과 같습니다.
예제
transform.Translate(new Vector3(0, 1, 0)); //게임 오브젝트가 지역 공간을 기준으로 (0, 1, 0)만큼 평행이동하는 코드
transform.position = transform.position + transform.up * 1; // 위 코드와 동일한 표현
// 게임 오브젝트가 전역 공간을 기준으로 (0, 1, 0)만큼 평행이동하는 코드
transform.Translate(new Vector3(0, 1, 0), Space.World);
// 위 코드와 동일한 표현
transform.position = transform.position + Vector.up * 1;
<참고>
레트로의 유니티 게임 프로그래밍 에센스
'Unity' 카테고리의 다른 글
(Unity) 시네머신(Cinemachine) (0) | 2022.10.10 |
---|---|
(Unity) 오브젝트 풀링 (효율적인 오브젝트 반복 생성) (0) | 2022.08.30 |
(Unity) 유니티에서의 벡터 활용 (0) | 2022.08.21 |
(Unity) Text, TextMeshPro 사용하기 (0) | 2022.08.19 |
(Unity) 점수 저장, 불러오기 or 최고점수 나타내기 - PlayerPrefs (0) | 2022.08.19 |