TransformDirection()
설명
TransformDirection은 로컬 좌표계의 방향 벡터를 월드 좌표계 방향 벡터로 변환하는 함수이다.
예를 들어, 월드 좌표에서 오른쪽(1,0,0) 방향으로 이동하려는 플레이어가 있다고 하자.
하지만 Y축을 기준으로 90도 회전된 상태이상이 걸렸다고 가정하면
로컬 기준에서는 여전히 오른쪽이지만, 월드 좌표에서는 (0,0,-1) 방향으로 이동하게 된다.
쓰는 이유
DirectX 등에서 월드 행렬과 로컬 행렬을 따로 관리하는 방식을 생각해 보면 이해하기 쉽다.
TransformDirection(로컬 방향 벡터)
→ [로컬 회전 행렬] × [월드 회전 행렬] 연산을 수행하여 변환된 방향 벡터를 반환한다.
이를 통해 회전 중인 객체라도 자연스럽게 방향을 계산할 수 있다.
추가 정보
1. TransformDirection은 크기를 변경하지 않는다.
ex) TransformDirection(Vector3(3,0,0)) → Vector3(0,0,-3)
2. 크기가 1인 벡터(단위 벡터)가 필요하다면 .normalized를 사용해야 한다.
ex) TransformDirection(Vector3(3,0,0)).normalized → Vector3(0,0,-1)
3. 자매품으로 world 벡터에서 local 벡터로 변환하는 InverseTransformDirection 함수가 있다.
사용처
if (Input.GetKey(KeyCode.W))
1. transform.Translate(Vector3.forward * speed);
2. transform.position += transform.TransformDirection(Vector3.forward) * speed;
위 코드는 Unity에서 w키를 눌렀을 때 플레이어를 이동시키는 코드이다.
TrasformDirection을 사용해 position값을 수정하거나 Translate을 사용해도 같은 결과가 나온다.