트랜스폼 Transform

트랜스폼 컴포넌트 Transform Component는 씬 scene 에서의 모든 객체들의 실질적인 위치 Position, 회전 Rotation, 그리고 스케일 Scale을 결정합니다. 모든 객체는 트랜스폼을 가지고 있습니다.


트랜스폼 컴포넌트는 인스펙터에서 보거나 편집이 가능합니다

속성들 Properties

Position X, Y, Z 좌표에서의 트랜스폼의 위치.
Rotation 도 degree 단위로 측정된 X, Y, Z축들로의 트랜스폼의 회전.
Scale X, Y, Z 축에서의 트랜스폼의 스케일. 값 “1”이 원래 스케일 (객체가 불려올 때의 스케일).

트랜스폼의 모든 속성들은 트랜스폼의 부모 parent 에게 상대적인 값으로 측정됩니다. 만약 트랜스폼이 부모를 가지지 않으면, 속성들은 세계 공간 World Space 에 비교해 측정됩니다.

트랜스폼들 사용하기 Using Transforms

트랜스폼들은 항상 3D 공간에서 X, Y, Z축을 사용하여 조정됩니다. 유니티 안에서는 이 축들은 각각 빨강 x, 녹색y, 파랑 z 의 색깔로 표현됩니다. (XYZ=RGB임을 명심하세요.)


3개의 축들과 트랜스폼 속성들 사이의 색상 코드로 표현된 관계

트랜스폼 컴포넌트들은 씬 뷰나 인스펙터를 사용하여 직접 조정할 수 있습니다. 인스펙터는 쉬운 편집을 위해서 언급된 속성들을 열거합니다. 사용자는 씬에서 이동, 회전, 스케일 도구들을 사용한 상호작용을 통해서 씬에서 트랜스폼들을 수정할 수 있습니다. 이러한 도구들은 유니티 에디터의 좌측 상단 구석에 위치해 있습니다.


보기 View, 이동 Translate, 회전 Rotate, 스케일 Scale 도구들

도구들은 사용자의 씬의 어떠한 객체에도 사용 가능합니다. 객체를 클릭하세요. 그러면 객체 주위에 도구기즈모tool gizmo 가 나타나는 것을 보게 될 것입니다. 현재 선택된 도구에 따라서, 기즈모 gizmo 는 약간씩 다르게 보이실 것입니다. 객체를 클릭하시는 것은 트랜스폼 컴포넌트가 인스펙터에서 보여지게도 합니다. 만약 인스펙터가 트랜스폼 컴포넌트나 속성들을 표시하지 않는다면, 씬 뷰에서 하이라이트된 객체도 없을 것입니다.



세 개의 기즈모 모두 씬 뷰에서 직접 편집이 가능합니다.

트랜스폼을 다루기 위해서는, 세 개의 기즈모 중 하나를 클릭하여 드래그합니다. 그러면 선택된 것의 색상이 변화하는 것이 보이실 것입니다. 마우스를 드래그하면 객체가 축을 따라 이동하거나, 회전, 스케일 하는 것을 보실 수 있을 것입니다. 마우스 버튼을 놓으면 release, 축이 여전히 선택된 상태로 남아 있는 것을 보게 될 것입니다. 사용자는 선택된 축을 따라 트랜스폼을 조정하기 위해서 마우스 중간 버튼을 클릭해서 드래그하세요. 세 개의 축을 한번에 선택하기 위해서는 세 개의 기즈모의 중심점을 클릭해서 드래그 하시면 됩니다.


각각의 축은 클릭시 선택됩니다

Parenting

부모자식관계설정 (패어런팅) Parenting

부모자식관계설정 (패어런팅) Parenting 은 유니티를 사용할 때 이해해야 할 가장 중요한 개념 중의 하나입니다. 하나의 게임오브젝트가 또 다른 게임오브젝트의 부모 Parent 일 때, 자식 게임오브젝트는 부모게임오브젝트가 하는 것을 그대로 따라서 움직이고, 회전하며, 스케일이 변화할 것입니다. 이것은 우리 몸에 부착되어 있는 팔들처럼 우리가 몸을 틀 때 팔들은 몸통에 붙어 있기 때문에 팔들도 같이 움직이게 됩니다. 어떤 객체도 다수의 자식 child 들을 가질 수는 있지만, 부모는 단 하나만 가지게 됩니다.

사용자는 계층뷰 Hierarchy View에서 하나의 게임오브젝트를 다른 게임오브젝트 위로 드래그해서 부모를 설정할 수 있습니다. 이것은 두 게임오브젝트들 사이에 부모-자식관계를 생성하게 될 것입니다.


부모-자식 구조의 실제 예. 화살표가 왼쪽에 붙은 모든 게임오브젝트들은 부모 게임오브젝트들입니다.

위의 예에서, 우리는 팔들이 몸에게 자식으로 관계설정되고 (A is parented to B = A가 B의 자식이 됨) , 손들은 팔들에 자식관계설정이 되었다고 말할 수 있습니다. 사용자가 유니티 안에서 만들 씬들은 이러한 트랜스폼 계층구조 Transform hierarchies의 집합을 포함하고 있을 것입니다. 최상위 부모 객체는 루트 객체 Root object라고 일컫습니다. 사용자가 부모 객체를 움직이거나 크기 변화 또는 회전을 시키면, 부모에게 적용된 모든 트랜스폼 변화들은 자식 객체들에게도 적용이 됩니다.

주목할 것은 어떤 자식 게임오브젝트의 인스펙터 내의 트랜스폼 값들이 부모의 트랜스폼 값들에 상대적으로 표시된다는 사항입니다. 이 트랜스폼 값들은 로컬(지역) 좌표 Local Coordinates들로 불려집니다. 스크립트를 통해서 로컬 좌표뿐만 아니라 전체 좌표 Global Coordinates에도 접근할 수 있습니다.

사용자는 복수의 개별 객체들을 서로 부모자식관계를 설정하여 인간 랙돌 ragdoll 같은 뼈대구조의 합성객체 compound object 를 생성할 수 있습니다. 사용자는 또한 하나의 부모설정으로 작지만 효과있는 객체들을 만들 수 있습니다. 예를 들면 사용자가 한밤중에 일어나는 공포게임을 만든다면, 회중전등 flashlight 로 효과적인 분위기를 만들려 할 것입니다. 이 전등 객체를 생성하기 위해서, 사용자는 스팟라이트 spotlight 트랜스폼을 회중전등 트랜스폼에 자식설정을 할 것입니다. 그러면 회중전등 트랜스폼의 변화는 스팟라이트에 영향을 줘서 그럴 듯한 회중 전등 효과를 만들게 됩니다.

스케일 Scale 의 중요성

트랜스폼의 스케일 scale 은 사용자 3D 모델링 프로그램에서의 메쉬 mesh 사이즈와 유니티 안에서의 메쉬 사이즈 사이의 차이를 말합니다. 유니티 안에서의 메쉬의 크기(즉 트랜스폼의 스케일)는 _굉장히_ 중요합니다. 그중에서도 특히 물리 physics 시뮬레이션 중에는 말입니다. 객체의 스케일을 결정하는 것에는 세 가지 요소가 있습니다:

  • 사용자의 3D 모델링 프로그램에서의 메쉬의 크기.
  • 객체의 불러오기 세팅 Import Settings에 있는 메쉬 스케일 요소 Mesh Scale Factor 설정.
  • 트랜스폼 컴포넌트의 스케일 (Scale) 값들.

사용자는 트랜스폼 컴포넌트 Transform Component 에서 객체들의 스케일 Scale을 조정하지 않는 것이 좋습니다. 가장 이상적인 것은 실제 세계에서의 스케일로 모델들을 제작하는 것입니다. 이는 트랜스폼의 스케일을 추후에 바꿀 필요가 없게 합니다. 두 번째로 차선책은 각각의 메쉬를 위하여 불러오기 설정 Import Settings에서 메쉬를 불러올 스케일을 조정하는 것입니다. 불러오는 파일의 크기에 기반해 어떤 최적화 작업이 일어나게 되고, 조정된 스케일 값을 가진 객체의 인스턴스화는 성능의 저하를 일으킬 수 있습니다. 더 많은 정보를 위해서는 Rigidbody 컴포넌트의 스케일 최적화 부분 optimizing scale 을 읽으시길 바랍니다.

힌트 Hints

  • 트랜스폼을 자식관계 설정할 때, 자식을 만들기 전에 부모의 위치를 0, 0, 0 에 두세요. 이는 나중에 일어날 골치거리들을 줄이게 해줍니다.
  • 파티클 시스템 Particle Systems은 트랜스폼 스케일에 영향을 받지 않습니다. 파티클 시스템의 스케일을 변화시키기 위해서는, 시스템의 파티클 이미터 particle emitter, 에니메이터 animator, 그리고 렌더러 renderer 안의 속성들을 변화시켜야 합니다.
  • 물리 physics 시뮬레이션을 위한 강체 Rigidbodies를 사용한다면, 리지드바디 (Rigidbody) 페이지에 스케일 속성에 관한 중요한 정보들을 보시는 것이 좋습니다.
  • Unity Menu→Preferences→Colors & keys에서 트랜스폼 축들 (그리고 다른 사용자 인터페이스 UI 요소들)의 색상들을 변경할 수 있습니다.
  • 스케일 바꾸는 것을 피할 수 있다면, 그렇게 하는 것이 낫습니다. 3D 모델링 프로그램 또는 메쉬의 불러오기 설정에서 모델들의 스케일을 완전히 결정짓도록 해보세요.
TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, class Doku_Renderer_metadata does not have a method "table_align"

TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, class Doku_Renderer_metadata does not have a method "table_align"

An unforeseen error has occured. This is most likely a bug somewhere. It might be a problem in the backlinks plugin.

/var/www/wiki/inc/parserutils.php:535