Unity ScreenPointToRay

ScreenPointToRay에 대해 알아보자

 

우리는 모니터를 통해 3차원 게임을 바라본다

모니터는 2차원 (쉽게 설명하면 가로, 세로로만 이루어진)으로 되어 있는데 어떻게 2차원 모니터의 한 지점을 눌렀을 때

게임 환경인 3차원에서의 Point지점으로 갈 수 있을까?

 

일단 원리는 이러하다

  1. 카메라로부터 플레이어가 클릭한 위치로 Ray(광선)을 쏜다
  2. 현재 카메라에 보이는 화면을 관통해 뻗어나가는 광선은 지정한 길이에 도달하거나 오브젝트에 부딪히면 멈춘다
  3. 오브젝트에 부딪혀 멈추게 되면 오브젝트의 정보를 얻는다

내용이 이해가 가지 않으면 그냥 이렇게 생각하자

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 같은 경우 말 그대로 게임 내에 환경에서의 위치와 관련됨