ScreenPointToRay에 대해 알아보자
우리는 모니터를 통해 3차원 게임을 바라본다
모니터는 2차원 (쉽게 설명하면 가로, 세로로만 이루어진)으로 되어 있는데 어떻게 2차원 모니터의 한 지점을 눌렀을 때
게임 환경인 3차원에서의 Point지점으로 갈 수 있을까?
일단 원리는 이러하다
- 카메라로부터 플레이어가 클릭한 위치로 Ray(광선)을 쏜다
- 현재 카메라에 보이는 화면을 관통해 뻗어나가는 광선은 지정한 길이에 도달하거나 오브젝트에 부딪히면 멈춘다
- 오브젝트에 부딪혀 멈추게 되면 오브젝트의 정보를 얻는다
내용이 이해가 가지 않으면 그냥 이렇게 생각하자
Mouse를 클릭한 곳에 뭔가의 Interaction을 취하고 싶으면
ScreenPointToRay이 녀석을 이용하면 된다~!
(해석하면 카메라로부터의 스크린 점을 통해 광선을 반환~)
주의! ScreenPointToRay 이 녀석은 픽셀단위이다! 해상도에 맞게 정보를 돌려줌!
정규화된 좌표를 얻고 싶으면 ViewportPointToTay 이 녀석을 사용하면 된다!
Camera관련된거는 이녀석 외에도
다른 녀석들도 많다
단! 주의사항
ScreenPointToRay와 ViewPointToRay는 Ray값을 반환 받는 존재이지만 나머지들은 수정하는 존재들임!!
- ScreenToViewportPoint : position을 Screen공간에서 Viewport 공간으로 수정
- ScreenToWorldPoint : position을 Screen공간에서 World 공간으로 수정
- ViewportToScreenPoint : position을 Viewport공간에서 Screen 공간으로 수정
- ViewportToWorldPoint :position을 Viewport공간에서 World 공간으로 수정
- WorldToScreenPoint :position을 World공간에서 Screen 공간으로 수정
- WorldToViewportPoint :position을 World공간에서 Viewport 공간으로 수정
먼저 위에 애들을 알기 전에 기본개념을 이해하고 보는게 좋으므로 개념을 설명해보겠다
먼저, Viewport 라는 거는 카메라에 하나만 존재하는 녀석이며
오브젝트가 카메라내에 위치하는 비율을 설정할 수 있다 (0~1사이의 값)
Screen 같은 경우에는 게임내에서의 해상도와 관련된 녀석이다
오브젝트가 카메라 안에서 해상도를 기준으로 위치한다
World 같은 경우 말 그대로 게임 내에 환경에서의 위치와 관련됨