Transform.TransformDirection
public Vector3 TransformDirection(Vector3 direction);
: direction을 로컬 공간에서 월드 공간으로 변형한다.
이 명령은 transform의 스케일 혹은 위치에 영향을 받지 않는다. 리턴값인 vector는 direction과 동일한 길이를 가진다.
만약 벡터의 방향 보다 위치를 표시해야한다면 Transform.TransformPoint를 사용하라.
유니티에서 3D로 작업을 한다면, 꼭 한번씩은 만나게되는 TransformDirection함수.
이해했다가도 다시 보면 햇갈리기 딱 쉬운 함수이기에 이번 기회에 제대로 한번 파헤쳐 보자.
일단 2차원 좌표 공간에서 (1, 1)이 의미하는 것을 생각해보자.
좌표공간 (1, 1)을 벡터 표기법으로 표시를 해보았다.
유니티 공간에서도 new Vector2(1, 1)로 쉽게 표현할 수 있다.
그렇다면 이번에는 Transform.TransformDirection(new Vector2(1, 1))에 대해서 알아보자.
위에서 적혀있던 설명에는 로컬공간에서 월드공간으로 변형한다고 적혀있다.
Vector2(1, 1)를 월드공간으로 변형한다는 말이 도대체 무엇일까?
예를 들어, 좌표공간(2, 2)에 위치한 큐브가 있다고 생각해보자.
이 위치(transform)에서 transform.TransformDirection(new Vector2(1, 1))을 Unity에서 실행하면 다음과 같이 나오게 된다.
1 2 3 4 5 6 7 8 9 10 11 12 | using UnityEngine; using System.Collections; public class Test : MonoBehaviour { void Start() { Debug.Log ("transform.TransformDirection(1, 1) : " + transform.TransformDirection(new Vector2(1, 1))); } } | cs |
그렇다.
Vector2(1, 1)을 출력했을 때와, 좌표(2, 2)에 위치(transform)에서 수행한 transform.TransformDirection(new Vector2(1, 1)은 차이가 없다. 위에서 보는 것처럼 TransformDirection은 해당 위치(transform)에서 vector가 가리키는 방향으로 direction의 길이만큼 방향을 나타낸다.
위에 그림이 잘 이해가 안될 수도 있으니 큐브의 방향을 오른쪽으로 45도 돌려보자.
오른쪽 방향으로 45도 돌렸더니, 확실히 차이점을 이해할 수 있게되었다.
transform.TransformDirection은 해당 transform의 로컬 공간축을 기준으로,
매개변수 벡터가 가리키는 방향의 값을 리턴한다.
여기서 주의할 점은, 위에 설명에도 나와있지만 transform의 위치값에 전혀 영향을 받지않는다.
혹시 착각을 하고 결과 값을 transform.position + transform.TransformDirection(1, 1) = (3.4, 2)으로
기대했다면, 잘못이해하고 있는 것이다.
다시 한번 말하지만, transform.TransformDirection는 매개변수로 받은 벡터를 transform의 로컬 공간축을 기준으로해서 리턴한다는 것이다.
마지막으로 유니티에서의 결과 값을 확인 해보자.
참조
- Tarnsform.TransformDirection (유니티 공식 API 문서)
'유니티 개발 정보 > 개념' 카테고리의 다른 글
Lerp (0) | 2015.07.12 |
---|---|
유한 상태 기계(Finite State Machines, FSM) #2 (3/3) (4) | 2013.12.03 |
유한 상태 기계(Finite State Machines, FSM) #2 (2/3) (1) | 2013.12.02 |
유한 상태 기계(Finite State Machines, FSM) #2 (1/3) (4) | 2013.11.30 |
유한 상태 기계(Finite State Machines, FSM) #1 (3/3) (2) | 2013.10.20 |