[Unity] position, localPosition
Unity 3D 오브젝트의 이동에 대해 정리를 해보려고 합니다.
추가적인 내용을 알아보려면
Transform.position, Transform.localPosition 참고하시면 됩니다.
말하기에 앞서 예시를 들기 위해 3D 오브젝트인 Cube, Plane을 생성해보겠습니다.
3D 오브젝트의 위치 값은 Transform의 position에 Vector3 ( x, y, z )의 형태로 담겨 있습니다.
위의 Transform 정보는 Cube Object의 데이터입니다.
현재 Position은 (0, 1, 0)의 값을 가지고 있습니다.
해당 오브젝트를 우측으로 이동시켜보겠습니다.
오브젝트를 우측으로 이동시키니 Position의 x값의 변화가 있습니다.
오브젝트의 위치 이동을 위해서는 Position 값의 변화가 필요하다는 것을 알 수 있습니다.
3d 오브젝트 방향 벡터
3D 오브젝트의 간편한 이동을 위해 Unity에는 방향을 나타내는 전역 벡터가 정의되어 있습니다.
방향 벡터
Direction | Vector3 |
---|---|
Vector3.forward | (0, 0, 1) |
Vector3.back | (0, 0, -1) |
Vector3.up | (0, 1, 0) |
Vector3.down | (0, -1, 0) |
Vector3.right | (1, 0, 0) |
Vector3.left | (-1, 0, 0) |
Vector3.zero | (0, 0, 0) |
Vector3.one | (1, 1, 1) |
Position
Position 값을 직접적으로 수정하여 Cube를 이동시키겠습니다.
아래의 코드가 작성된 스크립트를 Cube 오브젝트의 컴포넌트로 추가하였습니다.
1 | //오브젝트의 이동 속도 |
[결과]
매 프레임마다 프레임이 흐른 시간과 moveSpeed 를 이용하여 Position의 y값을 증가시켰습니다.
localPosition
위의 position은 localposition으로도 표현할 수 있는데요.
position과 localPosition은 어떤 차이가 있는걸까요?
position은 오브젝트의 위치 좌표를 월드 좌표 기준으로 가지고 있습니다.
localPosition은 오브젝트의 위치 좌표를 로컬 좌표 기준으로 가지고 있습니다.
월드 좌표와 로컬 좌표의 차이는 무엇일까요?
월드 좌표란 절대적인 좌표를 말합니다.
절대적인 시점에서 바라본 오브젝트의 위치이므로
어디에서 오브젝트 위치를 불러와도 항상 같은 값을 가지게 됩니다.
로컬 좌표는 상대적인 좌표를 말합니다.
만약 Cube 오브젝트가 또 다른 오브젝트의 자식 오브젝트로 존재한다면 부모 오브젝트가 이동할 경우 Cube 오브젝트가 같이 이동을 하게 됩니다.
이때 Cube의 position은 변하지만 localPosition은 변하지 않습니다.
그런 이유는 Cube 오브젝트의 기준이 부모 오브젝트이기 때문입니다.
1 | //오브젝트의 이동 속도 |
오른쪽으로 이동하는 기능을 부모 오브젝트에 추가해보겠습니다.
[Parent Object Position]
부모 오브젝트인 파란색 Cube를 이동시켜보았습니다.
우측의 inspector창에 보이는 position은 부모 오브젝트의 position입니다.
해당 오브젝트는 position 값이 변하는 것을 알 수 있습니다.
자식오브젝트인 분홍색 Cube의 position은 어떻게 변할까요?
[Child Object Position]
자식 오브젝트의 Position값은 변하지 않습니다.
이는 특정 오브젝트의 자식형질을 가지게 되면서 인스펙터 창에서 확인할 수 있는 position이 localPosition이기 때문입니다.
부모 오브젝트를 기준으로 일정한 간격을 두고 이동하기 때문에 localPosition에는 변동이 없는 상태입니다.
이런 경우에 저희가 눈으로 확인할 수 있는 값은 localPosition이므로
자식오브젝트 trnasform.position을 이용하여 자식오브젝트를 이동시키는 것과
transform.localPosition을 이용하여 이동시키는 것은 차이가 발생하게 됩니다.
그렇다면 자식 오브젝트를 이동시키기 위해서는 어떤 값을 이용할 수 있을까요?
이럴 때 사용하는 것이 localPosition입니다.
1 | //오브젝트의 이동 속도 |
자식 오브젝트를 일정하게 위로 이동시켜보겠습니다.
자식 오브젝트 position의 y값만 변화가 있는 것을 확인할 수 있습니다.
이는 자식 오브젝트의 localPosition에 변화를 주고 있기 때문입니다.
오브젝트의 이동 구현 또는 위치를 수정할 때 position과 localPosition을 적절하게 사용하시면 됩니다.