본문 바로가기

유니티 개발 정보/개념

Transform.TransformDirection


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(11)));
    }
}
 
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 문서)