2016년 8월 24일 수요일

GameObject Transform

이번에는 GameObject의 Scene상의 위치 정보를 다루는 Transform에 대해 자세히 알아보겠습니다.
모든 GameObject는 Transform이란 Component를 기본적으로 보유하고 있는데, Transform의 역할은 GameObject를 Scene에 배치시키는 것입니다.

3차원 공간은 X, Y, Z라 부르는 3개의 축을 기준으로 객체의 상태를 정의하게 됩니다. 유니티는 3차원 디자인 도구이므로 X, Y, Z축으로 GameObject의 위치 정보를 표현합니다.

유니티에서는 X, Y, Z축을 색깔로 표현하며 별도의 이름을 붙여서 사용합니다.
  • X축: 붉은색으로 표현하고 Right라 부른다.
  • Y축: 녹색으로 표현하고 Up이라 부른다.
  • Z축: 파란색으로 표현하고 Forward라 부른다.

3차원 공간에서 X, Y, Z축을 기준으로 객체의 상태는 위치(Position), 회전(Rotation), 크기(Scale)로 나누어서 표현합니다.
3차원에서 위치를 표현하는 방법

3차원 회전의 경우는 일반적으로 각 축에 대한 회전 각으로 표현하는 오일러(Euler) 방식을 많이 사용합니다. 오일러 방식에서는 X, Y, Z축에 대한 각도를 Roll, Pitch, Yaw 각도라고 부릅니다.
3차원에서 회전을 표현하는 방법 (Euler 방식)

3차원 크기는 X, Y, Z축의 방향으로 커지거나 작아지는 것을 의미하며 1보다 큰 값은 커지는 것이고, 1보다 작은 값은 작아지는 것입니다.

Inspector Window를 이용해서 위치, 회전, 크기를 직접 변경할 수도 있지만, Scene Window에서 Gizmo란 도구를 이용해서 마우스로 변경할 수도 있습니다.
위치, 회전, 크기에 따라 Gizmo의 모습은 달라진다.

GameObject는 Hierarchy Window에서 Group을 만들 수 있습니다.

이런 경우 Transform의 정보를 다룰 때 World와 Local이란 개념을 알아야 합니다.
GameObject의 Group에서 상위 GameObject를 부모(Parent)라 부르고, 하위 GameObject를 자식(Child)이라 부릅니다.
Transform 정보는 X, Y, Z축을 기준으로 정보를 표현하는데, Parent와 Child는 다음과 같은 차이가 생깁니다.
  • Parent는 Scene의 X, Y, Z축을 기준으로 표현하며 이를 World 좌표계라 부릅니다.
  • Child는 Parent의 X, Y, Z축을 기준으로 표현하며 이를 Local 좌표계라 부릅니다.
이런 이유로 Parent의 Transform이 변경되면 Child도 같이 변경됩니다. 하지만, Child의 Transform이 변경되어도 Parent는 영향 받지 않습니다.

Scene Window에서 GameObject Transform을 변경하다보면 Parent/Child 구조때문에 다음과 같은 불편한 문제가 발생하게 됩니다.
  • Child를 Scene 기준에 맞춰서 움직여야 하는 경우
  • Parent를 Child까지 포함한 기준에 맞춰서 움직여야 하는 경우
유니티는 이런 문제를 해결하기 위해 특별한 기능을 제공하고 있습니다.


선택한 GameObject를 World로 맞춰놓으면 Parent/Child구조와 상관없이 항상 Scene을 기준으로 움직일 수 있습니다. 반대로 Local로 맞춰놓으면 Parent를 기준으로 움직이게 됩니다.


선택한 GameObject를 Center로 맞춰놓으면 Child까지 포함해서 회전 중심을 사용하게 됩니다. 반대로 Pivot으로 맞춰놓으면 Child와 상관없이 자기 자신을 회전 중심으로 사용합니다.


지금까지 언급한 개념들은 Scene을 디자인함에 있어서 매우 중요하므로 여러번 반복 실험을 통해 각 기능과 용어에 대한 이해를 갖추는 것이 좋습니다.

댓글 없음:

댓글 쓰기