본문 바로가기

Unity 공부시작

유니티 :: Vector3와 Translate // 대각선 움직임이 더 빠른 경우

Vector3


- (x, y, z)로 이루어진 자료형


- x, y, z는 좌표가 아니라, 부모로부터 x, y, z만큼 떨어져 있다는 것을 의미한다.


- Vector3 끼리의 곱은 불가능하나 상수와의 곱은 가능하다.


Vector3.right : (1, 0, 0)

Vector3.left : (-1, 0, 0)

Vector3.up : (0, 1, 0)

Vector3.down : (0, -1, 0)

Vector3.forward : (0, 0, 1)

Vector3.back : (0, 0, -1)

Vector3.one : (1, 1, 1)

Vector3.zero : (0, 0, 0)


자신이 원하는 Vector3을 만들고 싶다면


Vector3 tempVector3 = new Vector3(a, b, c);


의 형태로 만들 수 있다.



Vector3은 아래와 같은 속성을 가지고 있다.

- magnitude : 벡터의 길이 ( 읽기 전용 )

- normalized : 크기가 1인 벡터, 정규화 벡터 ( 읽기 전용 )

- sqrMagnitude : 벡터의 길이의 제곱근 ( 읽기 전용 )

- x, y, z




* Transform.Translate( Vector3 direction, [Space relativeTo] );


2번째 인자 Space는 이동하는 게임오브젝트의 기준좌표가 월드 좌표( Space.World )를 기준으로 이동할지, 

로컬 좌표(Space.Self)를 기준으로 이동할지를 결정한다. 생략할 시 기본 값은 로컬 좌표이다.


float h = Input.GetAxis("Horizontal");

float v = Input.GetAxis("Vertical");


Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h);


위와 같이 하여 Translate의 첫 번째 인자로 넣어주게 되면, 대각선 방향의 벡터로 길이가 길어져 속도가 빨라진다.

따라서 1로 고정시켜주어야 하므로, 정규화 벡터(단위 벡터)를 이용해주어야 한다.

moveDir.normalized