[Unity 입문 강좌] 유니티 좌표계 체계의 이해와 활용 방법

1. 차원에 따른 좌표계

1.1. 1차원 좌표계

 

1차원 좌표계는 실질적으로 직선 상의 위치를 나타냅니다. 이 좌표계는 단일 축, 종종 x축이라고 부르는 값에 따라 결정됩니다. 가장 단순한 형태의 이 좌표계에서는, 단일 수치(스칼라) 값으로 표현됩니다. 

 

예를 들어, 온도 변화를 측정하는 것은 1차원 좌표계에서 이루어질 수 있습니다. 가령 어떤 곳의 기온이 낮부터 늦은 밤까지 어떻게 변하는지 보려면, 당신은 시간(1차원)에 따른 온도(측정 값)을 추적하면 됩니다.

 

 

1차원 좌표계 예시
1차원 좌표계

 


1.2. 2차원 좌표계

 

2차원 좌표계는 평면좌표계라고도 하며, 점들은 두 개의 값을 갖습니다. 값은 x와 y로 표현되며, 각각 수평축과 수직축을 나타냅니다.

 

예를 들어 당신이 지도를 사용하여 특정 도시의 위치를 찾는다고 할 때, 도시의 위치는 지도의 두 축, 즉 경도(x축)과 위도(y축)에 따라 결정됩니다.

 

 

2차원 좌표계 예시
2차원 좌표계

 


1.3. 3차원 좌표계

 

3차원 좌표계는 공간좌표계라고도 하며, 점들은 세 개의 값을 갖습니다. 이 값들은 x, y, z로 표시되며, 각각을 하나의 축이라고 생각할 수 있습니다. 이 좌표계는 우리가 살고 있는 실제 세상을 가장 잘 나타냅니다.

 

예를 들어, 당신이 드론을 날리고 있다고 상상해봅시다. 이 드론의 위치는 지상으로 부터의 높이(z축), 그리고 북쪽 및 동쪽으로의 거리(x축과, y축)에 따라 결정 됩니다.

 

 

3차원 좌표계 예시
3차원 좌표계

 

Unity는 3차원 게임 엔진으로, 3차원 좌표계를 사용하여 객체의 위치를 결정합니다. 스크립트에서 이를 사용하는 방법은 다음과 같습니다.  먼저, 객체의 위치를 설정하려면 transform.position을 사용하고 Vector3 객체를 제공해야 합니다. Vector3는 x, y, z의 세가지 값으로 구성됩니다.  (transform과 Vecot3와 관련 상세한 내용은 추후 학습합니다. 현재 글에서는 아래와 같은 형식으로 유니티에서 객체의 위치를 설정할 수 있고, 가져올 수 있다. 정도만 알고 넘어가면 됩니다.)

 

예를 들어, 객체를 (10, 15, 20) 위치로 이동하려면 다음 코드를 사용할 수 있습니다.

transform.position = new Vector3(10, 15, 20);

 

또한, 객체의 현재 위치를 얻으려면 transform.position을 사용할 수 있습니다. 이렇게 하면 currentPosition은 객체의 현재 위치를 나타내는 Vector3가 됩니다.

Vector3 currentPosition = transform.position;

 


3차원 공간을 표현하는 데에는 다양한 좌표계들이 사용됩니다. 이 중에서도 흔히 사용되는 좌표계는 왼손 좌표계와 오른손 좌표계입니다. 이는 세 축 X, Y, Z의 방향성을 결정하는 방법을 나타냅니다. 또한 3차원 공간에서의 높이를 표현하는 축이 Y축인지 Z축인지에 따라 Y-Up, Z-up으로 구분됩니다. 각 좌표계는 그래픽스 라이브러리나 게임 엔진에 따라 다르게 사용됩니다. 아래 이미지는 각 엔진에서 사용하는 좌표계입니다. 이제 이러한 좌표계의 특징에 대해 알아보도록 하겠습니다.

 

 

각 좌표계, 라이브러리에 따른 좌표계
출처 : 트위터(@FreyaHolmer)

 


2. 3차원 공간의 좌표계 종류

 

좌표계는 대부분의 그래픽스 라이브러리와 게임 엔진에서 기본적으로 내장되어 있습니다. 이 중 일부는 왼손 좌표계를 사용하며, 다른 일부는 오른손 좌표계를 사용합니다. 이 두 좌표계 사이의 주요 차이점은 z축의 방향입니다. 아래 이미지는 왼손 좌표계와 오른손 좌표계의 차이점을 보여주고 있습니다.

 

 

출처 : A Guide to Unity's Coordinate System (With Examples) - techarthub

 


2.1. 왼손 좌표계 (Left-handed coordinate system)

 

왼손 좌표계에서는 x축, y축, z축이 왼손의 엄지손가락, 검지손가락, 중지손가락과 같은 방향을 가리키도록 구성됩니다. 이 좌표계에서는 x축이 오른쪽, y축이 위쪽, 그리고 z축이 전방(화면 안쪽)으로 설정됩니다.

 


2.2. 오른손 좌표계 (Right-handed coordinate system)

 

오른손 좌표계에서는 x축, y축, z축이 오른손의 엄지손가락, 검지손가락, 중지손가락과 같은 방향을 가리키도록 구성됩니다. 이 좌표계에서는 x축이 오른쪽, y축이 위쪽, 그리고 z축이 후방(화면 바깥쪽)으로 설정됩니다.

 


3. 높이를 표현하는 축에 따른 좌표계

3.1. Y-up

 

Y-up은 3차원 공간에서 높이를 표현하는 축이 Y축이라는 것을 의미합니다. 이 경우 X축은 좌우 방향, Y축은 상하 방향, 그리고 Z축은 전후 방향으로 설정됩니다. Y-up 좌표계는 Unity, Maya, Blender 등의 게임 엔진과 3D 모델링 소프트웨어에서 주로 사용됩니다.

 

 

출처 :Y-Up or Z-Up (reallusion.com)

 

예시를 들어보면, Unity 게임 엔진에서 만들어진 모델이 있다고 가정합니다. 이 캐릭터를 위로 움직이려면, Y축 값만 변경하면 됩니다. 즉, 현재 위치가 (0, 0, 0)이라면, 캐릭터를 위로 움직이기 위해서는 위치를(0, 5, 0)으로 변경하면 됩니다.

 


3.2. Z-up

 

Z-up은 3차원 공간에서 높이를 표현하는 축이 Z축이라는 것을 의미합니다. 이 경우 X축은 좌우 방향, Y축은 전후 방향, 그리고 Z축은 상하 방향으로 설정됩니다. Z-up 좌표계는 3ds Max, Unreal Engine 등의 3D 모델링 소프트웨어와 게임 엔진에서 주로 사용됩니다.

 

 

출처 : Y-Up or Z-Up (reallusion.com)

 

Z-up 예시로, Unreal Engine에서 3D 캐릭터 모델이 있다고 가정하면, 이 캐릭터를 위로 움직이기 위해서는 Z축의 값을 변경해야 합니다. 즉, 현재 위치가 (0,0,0)이라면, 캐릭터를 위로 5 단위 움직이려면 위치를 (0,0,5)로 변경하면 됩니다.

 


Y-up과 Z-up 간의 변환은 간단한 수학적 연산을 통해 가능합니다. 예를 들어, Y-up 좌표계에서 Z-up 좌표계로 변환하려면 (x, y, z) 좌표를 (x, z, -y)로 변경하면 됩니다. 게임 개발이나 3D 모델링 작업 시 사용하는 소프트웨어에 따라 적절한 축을 사용하고 변환할 필요가 있습니다.

 


4. 좌표계 변환

4.1. 월드 좌표계

 

월드(World) 좌표계는 게임이나 3D 모델링에서 전체 공간에서 절대적인 위치를 나타내는 좌표계를 가리킵니다. 월드 좌표계의 원점은 보통 게임 세계의 중앙 또는 특정 지점으로 설정되며, 이 점을 기준으로 모든 위치와 거리가 측정됩니다. 월드 좌표계에서의 위치는 게임 세계의 고정된 기준점에 대한 상대적인 거리와 방향으로 표현됩니다.

 


예를 들어, 게임 세계에서 캐릭터의 월드 좌표계 위치가 (10, 20, 30)이라면, 이는 월드 좌표계의 원점으로부터 x축 방향으로 10, y축 방향으로 20, z축 방향으로 30의 거리에 위치해 있다는 것을 의미합니다.

 



4.2. 로컬 좌표계

 

로컬(Local)  특정 게임 오브젝트에 상대적인 위치를 나타내는 좌표계입니다. 각 게임 오브젝트는 자신만의 로컬 좌표계를 가지며, 이는 오브젝트의 원점, 회전, 크기에 따라 결정됩니다. 로컬 좌표계에서의 위치는 부모 게임 오브젝트(또는 부모가 없는 경우 월드 좌표계)에 대한 상대적인 거리와 방향으로 표현됩니다.

 

예를 들어, 로컬 좌표계 위치가 (0, 1, 0)이라면, 이는 부모 게임 오브젝트로 부터 x축 방향으로 0, y축 방향으로 1, z축 방향으로 0의 거리에 위치해 있다는 것을 의미합니다.

 


이미지에는 Cube와 Sphere 두 오브젝트가 표시되어 있습니다. Cube는 부모 오브젝트가 없어 월드 좌표계를 사용합니다. 따라서 Transform의 Position 값이 월드 좌표 (10, 20, 30)에 해당하며, 이는 Cube가 월드 공간에서 해당 좌표에 위치함을 의미합니다.

 

반면에 Sphere는 Cube를 부모 오브젝트로 가지고 있으며, 이 경우 로컬 좌표계를 이용합니다. Sphere의 Transform Position 값이 (0, 1, 0)으로 표시되는 이유는, 이 값이 부모 오브젝트인 Cube에 대한 상대적인 위치를 나타내기 때문입니다. 즉, 이 설정에 따라 Sphere는 Cube 위에 위치하게 됩니다.

 

 

유니티 월드 좌표계, 로컬 좌표계