좌표계 (Coordinate System)
우선 좌표계란 특정 차원의 공간에서 특정한 위치를 나타내기 위해 사용하는 방식이다
이러한 좌표계에는 '축' 이 존재하고 해당 선의 수직선 상에서 쉽게 특정 위치를
찾아낼 수 있다. x, y, z 총 세 개의 축으로 3차원 공간을 표현해낼 수 있으며
나머지 한 축을 뺀 x, y 축으로 좌표계를 표현한 것을 2차원 공간이라고 한다.

쉽게 2D, 3D 게임을 생각하면 이해하기 쉬울 것이다
게임들을 플레이 해보면 알 수 있듯이, 게임마다 각각 좌표를 표현하는 방식들이
제각각이다, 상하좌우로만 움직이는 게임이나, 또는 전후좌우로 움직임이 제한되는
경우가 있으니 참고해두길 바란다.

왼손 좌표계, 오른손 좌표계
좌표계는 크게 두갈래로 나뉜다, 바로 왼손 좌표계와 오른손 좌표계다.

위의 사진을 보면 짐작이 갈것이다 둘의 공통점으로는
각각의 x, y축은 +, - 를 표현하는 데 있어 같지만
나머지 한 축인 z 축이 서로 다르다는 점이다
왼손 좌표계의 경우 z의 양의 방향이 화면속으로 들어가는
방향이지만, 오른손 좌표계 같은 경우 z의 양의 방향이
화면 안으로 들어가는 방향이다.
우리가 알고있는 DirectX, OpenGL에서도 알 수 있는 사실이다
DirectX 같은 경우 왼손좌표계를, OpenGL의 경우 오른손 좌표계를
사용한다는 사실을 말이다.
Unity의 경우 DirectX가 바탕으로서 자연스레 왼손 좌표계를 따르게 되었다.
Y-Up, Z-Up
기본적으로 그래픽스를 공부하신 분이나 3DS MAX 같은 툴을
써보신 분들은 익숙한 단어일 수도 있다.
바로 좌표의 방향을 정의 할 수 있는 Z-up, Y-up이다
X축의 경우 기본적으로 거의 모든 좌표계 내에서
수평 방향의 수직선을 기준으로 하기 때문에
크게 신경 쓰진 않아도 되고
문제는 Y축의 경우 앞으로 나아가는 방향과 위로 향하는 방향
총 두 가지 방식이 존재하는데

위 사진처럼 Y를 앞으로 나아가는 방식의 게임이 존재하는데
이러한 경우 Z가 높이 축이 되어 Z-Up 방식이 적용된다.

반면 Y축을 위로 향하는 방향으로 정의하는 경우,
Y가 높이 축이 되어 Y-Up 방식이 적용된다.
월드 좌표, 로컬 좌표
월드 좌표의 경우, 월드. 즉 세상을 중심으로
특정한 오브젝트가 어느 위치에 있는지를 의미하고
로컬 좌표는 특정한 오브젝트를 중심으로 어느 위치에 존재하는지를 의미한다.
조금 어렵게 들릴 수 있는데
현실로 비유하자면, 월드 좌표는 지구 지도에서 우리 집이 경위도 좌표로 어디 있는지,
로컬 좌표는 현재 우리 집 공간 내에서 나와 화장실의 위치는 어느 정도 떨어져 있는지를
예시로 들 수 있을 것 같다.

유니티 내에서도 global, local이 툴바에 있는 것을 본 적이 있을 것이다.


이 버튼들을 통해 씬뷰에서 바로 대응하여 확인이 가능하다.


이처럼 로컬 좌표계 같은 경우는 오브젝트의 부모 자식 관계가 형성되어 있다면
접근이 가능하며, 부모가 존재하지 않은 최상위 오브젝트의 경우 로컬 좌표가
월드 좌표로 형성되어 나오게 된다.
스크린 좌표계, 뷰포트 좌표계
마지막으로 스크린 좌표계와 뷰포트 좌표계에 대해 간단히 집고 마치도록 하겠다,
스크린 좌표부터 알아보자

스크린 좌표도 운영체제나 사용하는 그래픽 API에 따라 방식이 다르지만
여기에서는 Unity 엔진을 기준으로 한 스크린 좌표를 설명해보도록 하겠다.
스크린 좌표는 도대체 언제 어디서 사용되고 필요할까?
별로 쓰임새가 없을 것 같지만
화면상에 마우스의 위치를 알아내거나, UI 구성, 충돌처리 등
이 외에도 여러 요소에서 많이 사용되고 있다.
우선 알아보아야 할 것이 스크린 좌표계의 중점이
화면 중앙이 아닌 왼쪽 하단에 위치해 있는 것이다.
X축은 오른쪽으로 +, Y는 위로 +
오른쪽 상단은 해상도에 대응되는 크기이다.
이것을 가지고 직접 유니티 내에서 디버깅을 해보면
using UnityEngine;
public class TEST : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButtonDown(0))
{
print($"X : {Input.mousePosition.x}, Y : {Input.mousePosition.y}");
}
}
}

마우스를 게임 뷰의 최대한 오른쪽 상단으로 위치하게 하여 클릭을 해보면
위 사진 왼쪽 하단 콘솔 창에서 볼 수 있듯이 X는 설정한 해상도 X 1920에 가까운 값이,
Y도 설정한 해상도 Y 1080에 가까운 값이 나오는 것을 확인할 수 있다.
뷰포트 좌표계를 설명해보자면
간단히 위에서 설명했던 스크린 좌표를 정규화한 것이다.
정규화란, 스칼라 값을 1로 만든 것이다
고등학교 수학 시간에 sin, cos, tan에 대해 간단히 배운 적이 있을 것이다,
그때도 좌표 계내에서 단위 원을 본 적이 있을 텐데 이것 또한 원을 길이를
1로 정규화시킨 것이다.

따라서 16:9 해상도이던, 9:16 해상도이던 2:2 해상도이던
해상도에 관계없이 길이를 1로 정규화시켜주어서
실제 화면에서 몬스터가 화면 밖으로 나갔는지
또는 다시 들어왔는지 등
스크립트 내에서도 멀티 해상도를 대응할 걱정 없이
손쉽게 작업할 수가 있다.
그리고 위에 사진에서도 알 수 있듯이 뷰 포트 좌표계는
스크린 좌표계와는 달리 왼쪽 하단이 중점이 아닌
왼쪽 상단이 좌표계의 중심이 된다.
이 외에도 극 좌표계, 구면 좌표계 등 많은 좌표계들이 존재하니
필요하다면 직접 검색을 해보며 찾길 바란다.
레퍼런스 사이트
https://codingmania.tistory.com/180
[유니티] 스크린 좌표계와 월드 좌표계 그리고 뷰포트 좌표계
스크린 좌표와 월드 좌표의 혼란때문에 머리가 복잡하다. 월드좌표로 하고 있는데 갑자기 스크린 좌표로 코드가 설정되었는지 이상해지고 있다. 예를 들어, 어떤 플레이어 캐릭터가 센터(0,0)에
codingmania.tistory.com
http://slaveofcod.egloos.com/v/1187872
코딩의노예 : 스크린 좌표를 이용하여 월드 좌표 구하기 1편 : gluUnProject 이용
화면상에 마우스로 클릭(스크린 좌표)한 3차원 물체의 월드 좌표를 구하는 일은 피킹, 충돌처리 여러 요소에서 많이 쓰인다. 화면상에 마우스로 클릭한 위치의 월드 좌표를 구하는 방법은
slaveofcod.egloos.com
'Unity > 지식' 카테고리의 다른 글
| [Unity] 메인 루틴과 서브루틴, 코루틴(Co-routine) 에 대해 알아보자 (0) | 2022.01.11 |
|---|---|
| [Unity] 쿼터니언과 짐벌락 현상에 대해 알아보자 (0) | 2022.01.05 |
| [Unity] Attribute 에 대해 알아보자 (0) | 2021.12.21 |
| [Unity] 라이프 사이클(Life Cycle) 에 대해 알아보자 (0) | 2021.12.20 |
| [Unity] Delta Time 에 대해 알아보자 (0) | 2021.12.19 |