게임 오브젝트를 배치하거나 이동, 회전 스케일링하는 과정에서 좌표계의 개념은 매우 중요한 역할을 한다. Unity에서는 대표적으로 World Space와 Local Space라는 두 가지 좌표계 사용된다. 이 두 좌표계의 개념과 차이를 명확히 이해하면, 오브젝트의 트랜스폼(Transform)을 보다 정확하게 제어할 수 있다.
World Space는 전역 좌표계를 의미한다. 이는 Unity 씬(Scene) 전체의 절대적인 기준 좌표계로, 모든 오브젝트의 위치는 궁극적으로 World Space를 기준으로 표현된다.
예를 들어, (0, 0, 0) 좌표는 씬의 원점을 나타내며, 이는 씬의 카메라나 다른 오브젝트의 위치와 무관하다. 오브젝트를 월드 좌표로 이동시키면, 부모 오브젝트의 영향과 관계없이 절대적인 위치에 배치된다.
특징
예시 코드
// 오브젝트를 월드 좌표 (0, 5, 0) 위치로 설정
transform.position = new Vector3(0f, 5f, 0f);
Local Space는 로컬 좌표계 또는 자기 좌표계를 의미한다.
이는 해당 오브젝트의 부모 오브젝트(Parent)를 기준으로 정의되는 상대적인 좌표계이다.
오브젝트가 부모를 가지지 않는 경우, Local Space는 World Space와 동일하게 동작한다.
Local Space는 부모의 위치, 회전, 스케일에 영향을 받기 때문에, 부모 오브젝트가 회전하면 자식 오브젝트의 로컬 축 방향도 함께 변한다.
따라서 로컬 좌표는 오브젝트가 부모 구조 내에서 어떻게 배치되는지를 나타낸다.
특징
// 부모 기준으로 오브젝트를 (0, 2, 0) 위치에 배치
transform.localPosition = new Vector3(0f, 2f, 0f);
Vector3 localPos = transform.InverseTransformPoint(worldPosition);
Vector3 worldPos = transform.TransformPoint(localPosition);
이러한 변환 메서드는 좌표계를 명시적으로 변환할 때 사용된다. 특히, 물리 연산이나 경로 계산 시 두 좌표계의 변환은 필수적이다.
1. 부모의 회전 및 스케일 변화를 인지할 것
2.좌표계 혼동으로 인한 비정상 동작
3.부모 변경 시 로컬 좌표가 재계산됨
child.SetParent(newParent, false); // 로컬
4.UI(Canvas) 환경에서의 World Space
UI 오브젝트의 RectTransform은 일반 Transform과 달리, World Space Canvas 환경에서는 모든 UI 요소가 절대 좌표를 기준으로 동작한다.
UI의 Local Position은 부모 RectTransform의 피벗과 앵커(anchor) 설정에도 영향을 받으므로, 정확한 배치를 위해서는 피벗/앵커 설정을 함께 확인해야 한다.
5.물리 연산 시 축 방향 오해 주의
Rigidbody.AddForce 등에 Local Space 축을 직접 전달하면 의도와 다른 방향으로 힘이 가해질 수 있다.
이 경우, transform.forward, transform.right 등 현재 방향 벡터를 활용하여 World Space 방향으로 변환하는 것이 안전하다.
구분 | World Space | Local Space |
---|---|---|
기준 | 씬 전체의 전역 좌표계 | 부모 오브젝트를 기준으로 한 상대 좌표계 |
영향 요소 | 부모 오브젝트의 이동, 회전, 스케일 무시 | 부모 오브젝트의 이동, 회전, 스케일 반영 |
좌표값 변경 시 | 절대 위치 변경 | 부모를 기준으로 상대 위치 변경 |
World Space와 Local Space의 차이를 명확히 이해하는 것은, 오브젝트 배치나 움직임 제어, 카메라 연출 등 다양한 게임 개발 과정에서 필수적이다. 특히, 부모-자식 관계가 복잡하게 구성된 씬에서는 두 좌표계를 혼동하면 예상치 못한 동작이 발생할 수 있으므로, 상황에 맞는 좌표계를 선택하여 사용하는 것이 중요하다.