트랜스폼(Transform) 은 게임 오브젝트의 포지션, 회전, 스케일, 부모-자식 상태를 저장하기 위해 사용하며 따라서 매우 중요합니다. 게임 오브젝트에는 항상 하나의 트랜스폼 컴포넌트가 있습니다. 이 트랜스폼을 제거하거나, 트랜스폼이 없는 게임 오브젝트를 생성하는 것은 불가능합니다.
트랜스폼(Transform) 컴포넌트는 씬 속 각 오브젝트의 Position, Rotation 및 Scale 을 결정합니다. 모든 게임 오브젝트에는 트랜스폼이 있습니다.
프로퍼티: | 기능: |
---|---|
Position | X, Y, Z 좌표에서의 트랜스폼 포지션입니다. |
Rotation | X, Y, Z 축 주변의 트랜스폼 회전으로, 도 단위로 측정합니다. |
Scale | X, Y, Z 축을 따르는 트랜스폼 스케일입니다. “1” 값은 오리지널 크기(오브젝트를 임포트했을 때의 크기)입니다. |
트랜스폼의 포지션, 회전 및 스케일 값은 트랜스폼 부모를 기준으로 측정됩니다. 트랜스폼에 부모가 없는 경우 프로퍼티는 월드 공간에서 측정됩니다.
트랜스폼은 X, Y, Z축으로 이루어진 3D 공간 또는 X, Y축만 있는 2D 공간에서 조작합니다. Unity에서는 이런 축을 각각 빨간색, 초록색, 파란색으로 나타냅니다.
트랜스폼은 씬 뷰에서 편집하거나 인스펙터에서 프로퍼티를 변경할 수도 있습니다. 씬에서는 이동, 회전, 스케일 툴을 사용하여 변환을 변경할 수 있습니다. 툴은 Unity 에디터의 왼쪽 상단에 위치합니다.
이 툴은 씬의 어떠한 오브젝트에도 사용할 수 있습니다. 어떤 오브젝트를 클릭하면 해당 툴의 기즈모가 그 안에 나타납니다. 선택한 툴에 따라 나타나는 기즈모의 모양이 달라집니다.
세 개의 기즈모 축 중 하나를 클릭하여 드래그하면 이 축의 컬러가 노란색으로 변합니다. 마우스를 드래그하면 오브젝트가 선택한 축을 따라 이동, 회전, 스케일되는 것을 볼 수 있습니다. 마우스 버튼에서 손을 떼어도 이 축은 선택된 상태로 유지됩니다.
또한 이동 모드에서는 특정 평면에 대한 움직임을 잠글 수 있는 추가 옵션이 있습니다(즉, 두 축 방향으로만 드래그가 가능하고 나머지 한 축 방향으로는 변화하지 않음). 변환 기즈모 중심 주변에 놓인 세 개의 작은 색색 사각형은 각 평면을 잠그기 위해 사용합니다. 각 색상은 해당 사각형을 클릭했을 때 잠기게 될 축을 나타냅니다(예: Z축을 잠그려면 파란색 클릭).
부모-자식 관계 설정(Parenting)은 Unity 사용 시 이해해야 할 가장 중요한 개념 중 하나입니다. 어떤 게임 오브젝트가 다른 게임 오브젝트의 부모 일 경우, 그 자식 게임 오브젝트는 부모 오브젝트가 이동, 회전, 스케일할 때 정확히 동일하게 동작합니다. 부모-자식 관계는 사람의 몸과 팔 사이의 관계와 비슷하다고 볼 수 있습니다. 몸이 움직이면 팔 역시 몸을 따라 움직입니다. 또한 자식 오브젝트는 자신의 자식을 가질 수 있습니다. 따라서 손은 팔의 “자식”이라고 간주할 수 있고, 또 손에는 여러 개의 손가락이 달려있을 수 있습니다. 모든 오브젝트는 여러 개의 자식을 가질 수 있으나, 부모는 단 하나만 가질 수 있습니다. 이렇게 부모-자식 관계가 여러 계층 구조로 이루어지면 트랜스폼 _ 계층 구조_가 형성됩니다. 계층 구조의 맨 위에 위치한 오브젝트(즉, 이 계층 구조에서 부모가 없는 유일한 오브젝트)는 root 라고 합니다.
부모를 생성하려면 계층 창 에서 원하는 게임 오브젝트를 다른 오브젝트로 드래그하면 됩니다. 이렇게 하면 두 게임 오브젝트 간에 부모-자식 관계가 생성됩니다.
모든 게임 오브젝트용 인스펙터의 트랜스폼 값은 부모 트랜스폼 값에 상대적으로 나타난다는 점에 유의해야 합니다. 이런 값은 local coordinates 를 나타냅니다. 몸과 팔의 예를 다시 들어 보면, 사람이 걸으면 몸의 포지션은 이동할 수 있으나 팔은 여전히 동일한 상대 포지션에 붙어 있게 됩니다. 씬 구성에 있어서 보통 자식 오브젝트는 로컬 좌표를 가지고 작업하는 것으로 충분하지만 게임플레이 중에는 월드 공간의 정확한 포지션 또는 global coordinates 를 사용하는 것이 더 유용합니다. Transform 컴포넌트용 스크립팅 API는 로컬 및 글로벌 포지션, 회전, 스케일용으로 별도의 프로퍼티를 가지고 있으며, 또한 어떤 점이든 로컬 및 글로벌 좌표 간에 변환할 수 있도록 해 줍니다.
비균등 스케일링은 트랜스폼의 Scale 이 x, y, z에 대해 서로 다른 값을 가지고 있는 경우(예: (2, 4, 2))를 말합니다. 이와 반대로 균등 스케일은 x, y, z에 대해 같은 값을 가진 경우(예: (3, 3, 3))입니다. 비균등 스케일은 몇몇 특정 경우에 유용하지만 보통은 그래픽 렌더링 속도가 느려지기 때문에 사용을 피해야 합니다. 또한 비균등 스케일을 사용하면 균등 스케일에서는 발생하지 않는 이상한 점이 나타날 수 있습니다.
트랜스폼의 스케일은 사용하는 모델링 애플리케이션에서의 메시 크기와 Unity에서의 메시 크기 간의 차이를 결정합니다. Unity에서의 메시 크기(즉 변환의 스케일)는 매우 중요하며, 특히 물리 시뮬레이션 중에는 더 중요합니다. 물리 엔진은 기본적으로 월드 공간에서의 한 유닛이 1미터에 해당한다고 간주합니다.어떤 오브젝트가 매우 클 경우, “슬로우 모션”으로 떨어지는 것처럼 보일 수 있습니다. 이 시뮬레이션은 실제로 정확한데, 실질적으로 매우 큰 오브젝트가 긴 거리 만큼 떨어지는 것을 보는 셈이기 때문입니다.
오브젝트의 스케일에 영향을 줄 수 있는 요인은 세 가지가 있습니다.
이상적으로는 트랜스폼 컴포넌트에서 오브젝트의 Scale 을 조정하지 말아야 합니다. 가장 좋은 방법은 현실 스케일로 모델을 생성하여 트랜스폼의 스케일을 변경할 필요가 없도록 하는 것입니다. 차선책은 메시를 임포트할 때 Import Settings 에서 각각의 메시에 대해 스케일을 조정하는 것입니다. 임포트 크기에 기반하여 특정 최적화가 일어나며 스케일 값을 조정한 오브젝트를 인스턴스화하면 성능 저하가 일어날 수 있습니다. 더 많은 정보를 확인하려면 Rigidbody 컴포넌트 레퍼런스 페이지에서 스케일 최적화에 대한 섹션을 참조하십시오.