본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티 구현 정리_Implement Summary

유니티 각개격파_015_스크린(Screen) 좌표와 World(월드) 좌표

유니티의 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...