유니티의 space(공간)은 Screen Space(스크린 공간)과 World Space(월드 공간)이 있다.
각각의 공간에서 사용하는 좌표계가 따로 있다.
Screen Point
스크린 좌표계는 화면의 width(넓이)와 height(높이)에 따라 x , y 좌표가 정해진다.
화면의 넓이와 높이를 결정하는 해상도의 픽셀(pixel)에 따라 화면에 나타내는 2D 좌표계이다.
예를 들어 Game탭에서 해상도를 800 x 480으로 정했다면 왼쪽 아래의 x, y 좌표는 (0, 0)이고 오른쪽 위가 (800, 480)이다.
마우스 포인터의 위치나 UI를 넣는 캔버스(Canvas) 등이 이 좌표계를 사용한다.
그러므로 마우스로 클릭하는 위치 또는 손가락으로 터치하는 위치를 가져올 때 사용할 수 있다.
World Point
반면에 World(월드) 좌표계는 Scene에서 나타나는 게임 세계(World)에서 게임오브젝트의 위치를 나타낼 때 사용한다.
Inpector창의 Transform에 있는 좌표이다.
추가로 월드좌표계에서는 Local(로컬) 좌표계도 있는데 이것은 게임오브젝트가 각자 가지고 있는 좌표계이며 회전에 따라 축이 바뀐다.
예를 들어 Translate( )라는 메서드는 게임오브젝트를 이동할 때 사용하는데 이 로컬 좌표계로 계산되어 이동하게 된다.
만약 회전하면서 이동하게 되면 회전에 의해 축이 바뀌면서 이동하는 방향이 달라질 수 있으므로 주의해야 한다.
또한 어떤 게임오브젝트의 Child(자식)으로 들어가면 부모 객체의 회전에 따라 함께 움직이지만 자신의 로컬 좌표계에는 영향이 없다.
Viewport Point
또 다른 위치를 나타내는 Viewport Point라는 좌표계가 있다.
이 좌표계는 카메라에 상대적이며 전체 크기를 normalized(정규화)해서 범위를 0~1로 잡는다.
즉, 카메라에서 객체의 위치를 0에서 1 사이의 값으로 표현한 것이다.
정리하면 마우스 포인터로 화면의 위치를 찍었을 때 그 좌표와 실제 게임 화면의 좌표는 전혀 다르므로 World좌표로 변환해 주어야 한다. 이 계산을 위해 ScreenToWorldPoint( ), ScreenToViewportPoint( ) 같은 메서드를 만들어 두었다.
어떻게 구현하는 지는 다른 글에서 실습한다.
끝.
Wraven...
'취미로 하는 게임코딩_gameCodingAsHobby > 유니티 구현 정리_Implement Summary' 카테고리의 다른 글
유니티 각개격파_016_카메라(Camera) (0) | 2021.06.04 |
---|---|
유니티 각개격파_014_벡터(Vector)와 이동(Translate)_마우스 이동 (0) | 2021.06.04 |
유니티 각개격파_013_벡터(Vector)와 이동(Translate)_키보드 이동 (0) | 2021.06.02 |
유니티 각개격파_012_벡터(Vector)와 이동(Translate)_좌표축 이동 (0) | 2021.05.29 |
유니티 각개격파_011_벡터(Vector)와 회전(Rotate)_C (0) | 2021.05.28 |