Unity/기초

[Unity][기초] 'Transform어쩌고' 좌표변환

자가라o 2021. 8. 26. 04:21

Transform의 멤버함수 중에는

TransformDirection / TransformPoint / TransformVector 시리즈가 있다.

어느날 우연히 봤는데 궁금해서 정리했다.

 


 

1. public Vector3 TransformDirection(Vector3 direction);

  • 로컬공간에서 월드공간으로 /direction/을 변환합니다.
  • 이 연산은 transform의 스케일이나 위치에 영향 받지 않습니다.
  • 반환된 벡터는 /direction/처럼 같은 길이를 갖습니다.

 

Transform center;
Transform target;

center.TransformDirection(target.position);
// Rotation없이 사용하게 되면 target의 좌표가 그대로 나온다.
// 만약 center의 Rotation값이 변경되었다면
// Rotation없는 TransformDirection의 값을 변경된 Rotation만큼 회전시킨 값이 나온다.

 

 

2. public Vector3 TransformPoint(Vector3 position);

  • 로컬공간에서 월드 공간으로 /position/을 변환합니다.
  • 반환된 위치는 스케일의 영향을 받습니다.
  • 방향 벡터를 처리하는 경우에 사용합니다.
  • 반대(월드 공간 -> 로컬 공간)의 변환 : Transform.InverseTransformPoint

 

Transform center;
Transform target;

center.TransformPoint(target.position);
// 값을 도출하는 방식은 TransformDirection과 같다.
// 다른 점은 기준이 되는 좌표가 center이다.
// center(월드좌표) + TransformDirection으로 보면 될 것같다.

 

 

3. public Vector3 TransformVector(Vector3 vector);

  • 로컬공간에서 월드 공간으로 /vector/을 변환합니다.
  • 이 연산은 transform의 위치에 영향을 받지 않지만 스케일에 영향을 받습니다.
  • 반환된 벡터의 길이가 벡터와 다를 수 있습니다.
Transform center;
Transform target;

center.TransformVector(target.position);
// 값을 도출하는 방식은 TransformDirection과 같다.
// 다른 점은 Scale에 영향을 받는다.
// TransformDirection * Scale로 보면 될 것같다.

 

 


<center의 Rotation이 변화할때 각 함수의 그래프>

center(3, 3)과 target(1, 1) // scale 2

 

TransformDirection - scale에 변화없음, (0, 0)원점 기준

TransformPoint - scale에 영향, (0, 0)원점기준

TransformVector - scale에 영향, (3, 3)center 기준