Unity

[Unity] 좌표계에 대해 알아보기

윤창범 2021. 11. 22.

이번 글에서는 좌표계가 무엇이고 Unity 에서 좌표계는 어떻게 쓰이는지 알아볼 것이다.

 

시작하기 앞서, 정말 처음 입문하는 사람들에게도 알기 쉽게 정리된 참고 블로그와 영상 자료가 있어서 적어둔다.

 

https://wergia.tistory.com/161

 

[Unity3D] Tutorial (5) - 유니티의 좌표계

Tutorial (5) 유니티의 좌표계 작성 기준 버전 :: 2018.3.1f1 [본 튜토리얼의 내용은 유튜브 영상으로도 시청할 수 있습니다] 이번 섹션에서는 유니티의 좌표계에 대해서 알아보자. 좌표계란? 좌표계란

wergia.tistory.com


좌표계

 

좌표계특정 차원의 공간에서 특정한 위치를 나타내기 위한 방식이다.

(이 글에서 다루게 될 특정 차원은 3D 게임의 3차원 공간을 의미한다)

 

그리고 특정한 위치를 찾기 위해서, 축이라는 것을 기준으로 사용한다.

 

(흔히 학교에서 수학 시간에 많이 봤었던 2차원 데카르트 좌표계의 모습, 좌표평면이라고도 한다)

축을 기준으로 사용하게 되면, 해당 축의 수직선 상에서 쉽게 점과 같은 특정 위치를 찾을 수 있다.

 

만약에 위의 좌표평면을 예시로, X축과 Y축을 이용하면 좌표평면 상의 중심으로부터 점의 위치를 찾을 수 있다.

 

(점A 와 점C 의 위치를 살펴보자)

그리고 이제 X축, Y축, Z축까지 3개의 축을 사용하면, 3차원 공간 상에서의 특정 위치까지 알아낼 수 있다.

 

 

Unity 에서는 Scene 이라는 공간에서 오브젝트의 위치를 표현하기 위해 좌표계를 사용한다.

 

우리가 여러 게임들을 플레이 해보고 찾아보면 알 수 있듯이 대부분의 게임들은 2D 좌표계나 3D 좌표계를 사용한다.

(참고 블로그에서는 슈퍼 마리오와 하프라이프를 예시로 들었다)

 

또한 좌표계에 따라서도 상하좌우 및 전후좌우로 움직임이 제한되는 경우가 있으니 참고하도록 하자.


왼손 좌표계와 오른손 좌표계

이제 좌표의 축에서도 축을 정하는 방법이 여럿 존재하는데, 대표적인 것이 왼손 좌표계와 오른손 좌표계다.

 

(오른손 좌표계 / 왼손 좌표계)

 

왼손 좌표계와 오른손 좌표계에 대해서 처음 들어본다면 어려울 수 있지만 매우 간단하다.

 

만약에 우리의 시선이 위의 그림의 손바닥에서 출발한다고 가정해보자.

 

우리가 오른손 좌표계로 어떤 물체의 면을 보면, 우리가 보는 면은 정면이다. (캐릭터의 정면)

반대로,

우리가 왼손 좌표계로 어떤 물체의 면을 보면, 우리가 보는 면은 뒷면이다. (캐릭터의 뒷면)

 

둘의 차이점은 시선에서 물체가 멀어질 때, Z축의 값의 음과 양의 방향이 반대라는 것이다.

 

보통 물리학이나 수학에서 사용되는 것은 오른손 좌표계이고, Unity 에서는 왼손 좌표계가 사용된다.

(참고로 언리얼도 왼손 좌표계가 사용된다.)

 

혹시나 좀 더 길고 자세한 설명을 원한다면, 글의 맨 처음에 소개한 참고 블로그 자료와 영상을 보면 될 것 같다..

 


Y-Up 과 Z-Up

좌표의 축을 정하는 것 외에도, 관점에 따라서 축을 앞으로 나아가는 방향으로 정의할 것인지

혹은

위로 향하는 방향으로 정의할 것 인지 해결해야 할 문제가 존재한다.

 

X축의 경우에는 기본적으로 수평 방향의 수직선을 기준으로 하기 때문에, 대부분은 같은 방향으로 고정되어 있다.

 

하지만 Y축의 경우에는 앞으로 나아가는 방향, 위로 향하는 방향

 

총 2가지의 정의 방식이 존재한다.

 

(초등학생 때 많이 플레이했었던 크레이지 아케이드다)

먼저 Y축을 앞으로 나아가는 방향으로 정의할 경우에는 Z축이 높이 축이 되는 Z-Up 방식이 적용된다.

 

(슈퍼 마리오 브라더스)

반대로 Y축을 위로 향하는 방향으로 정의할 경우에는 Y축이 높이 축이 되는 Y-Up 방식이 적용된다.

 

Unity 의 경우에는 Y-Up 방식이 적용되어있다.

 


월드 좌표와 로컬 좌표 그리고 스크린 좌표계와 뷰포트 좌표계

마지막으로 월드 좌표로컬 좌표에 대해서 알아볼 것이다.

(스크린 좌표계과 뷰포트 좌표계는 마지막 설명을 참고)

 

월드 좌표월드 공간 (세상) 을 기준으로 특정 물체나 존재 어느 위치에 존재하는지를 의미한다.

(세상의 원점을 기준으로)

 

현실로 비유하자면, 지구의 지도에서 우리 집이 경위도 좌표로 어디에 위치하는지와 같다.

 

반대로

 

로컬 좌표특정 물체나 존재를 중심으로 어느 위치에 존재하는지를 의미한다.

(특정 위치를 기준으로)

 

이것도 현실로 비유하자면, 우리 집 공간을 중심으로 컴퓨터가 어느 방의 어디에 위치하는지와 같다.

 

(왼쪽은 월드 좌표에 대한 예시 / 오른쪽은 로컬 좌표에 대한 예시)


이제 Unity 에서는 어떻게 쓰이는지 알아보자.

 

먼저 알아야 할 간단한 사전 설명이다.

 

Unity 의 모든 GameObject로컬 좌표계월드 좌표계를 가진다.

 

부모 자식 관계가 아닌 오브젝트로컬 좌표계와 월드 좌표계가 동일한다.

(월드가 기준)

 

부모에 속한 자식 오브젝트의 경우에는 로컬 좌표계가 부모 오브젝트를 기준으로 한다.

(특정 오브젝트가 기준)

 

바로 Unity Editor 에서 살펴보자.

 

(월드 좌표 기준)
(로컬 좌표 기준)

 

부모가 존재하지 않는 오브젝트라면 월드 좌표와 로컬 좌표가 동일하게 나오겠지만,

부모가 존재하는 오브젝트라면 월드 좌표와 로컬 좌표의 위치와 각도가 서로 다르게 나오게 된다.

 

실제로 쓰일만한 적용 예시가 있냐고 한다면, 플레이어를 단순하게 따라다니는 카메라나

플랫포머 게임의 이동하는 물체에 올라가서 물체를 따라 움직이는 캐릭터 등이 있을 것 같다.

 

카메라를 플레이어의 자식으로 속하게 만들어서 따라다니게 만들고,

이동하는 물체에 플레이어가 올라가 있는 동안에만 플레이어를 해당 물체를 자식으로 속하게 만드는 등의 적용이 가능하다.

 

이제 스크린 좌표계와 뷰포트 좌표계가 남았는데, 앞선 설명들을 이해했다면 참고자료만 봐도 어렵지 않을 것 같다.

 

스크린 좌표계와 뷰포트 좌표계 (참고자료)

 

[유니티] 스크린 좌표계와 월드 좌표계 그리고 뷰포트 좌표계

스크린 좌표와 월드 좌표의 혼란때문에 머리가 복잡하다. 월드좌표로 하고 있는데 갑자기 스크린 좌표로 코드가 설정되었는지 이상해지고 있다. 예를 들어, 어떤 플레이어 캐릭터가 센터(0,0)에

codingmania.tistory.com


마무리

 

최대한 짧고 간단하게 설명을 남기기 위한 목적으로 작성했으나,

부족하다면 글에 사용된 이미지의 출처 및 자료를 추가 참고해도 될 것 같다.

 

참고자료1

참고자료2

참고자료3

댓글