[Unity3D] 카메라 광선 (Ray)

카메라 광선 (Rays)




유니티 공식 문서 

http://unitykoreawiki.com/index.php?n=KrMain.CameraRays





Rays가 뭐죠?


시작점(Origin), 방향(Direction)을 가지고, 시작점에서 정해진 방향으로 광선을 쏩니다.

Camera에서 한방향으로 광선을 쏘는거죠.



Camera 클래스에는 2가지 기능이 있습니다.

 ScreenPointToRay 

 픽셀 좌표로 제공됩니다. 왼쪽아래(0 , 0), 오른쪽위(pixelWidth, pixelHeight)



 ViewportPointToRay

 0~1범위 내에서 정규화 된 좌표입니다. 왼쪽아래(0 , 0) 오른쪽위(1 , 1)





Ray로 뭘 할 수 있죠?



카메라에서 광선을 뙇 쏴서 

어떤 물건을 바라보고 있는지, 유저가 클릭한게 뭔지를 알 수 있습니다.

Ray로 광선을 쏘고, Ray를 따라가는 RayCasting으로 알아낼 수 있습니다.




레이 캐스팅 (RayCasting)?


Raycast는 '가상의 레이저빔!!'입니다. 

해당 Ray를 따라서 충돌체(Collider)에 부딪힐 때까지 전송을 합니다.

부딪힌 오브젝트에 대한 정보와 부딪힌 지점이 반환됩니다.





글만봐서는 이해가 잘 안갈수도 있지만 예제코드를 보시면 이해가 가실거에요.


마우스 위치에 있는 오브젝트 알아 내기 코드

private RaycastHit hit = new RaycastHit();

private Ray ray;

void Update()

{

     ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    if(Physics.Raycast(ray, out hit)
    {
       Transform objectHit = hit.transform;
    }
}



광선이 어딜 쏘는지 보고 싶어요!


아래 코드를 적용하면 카메라의 광선을 Scene View에서 확인 가능합니다.

그냥 광선은 빨간색으로 표현하고, 어떠한 물체에 부딪히면 초록색 광선을 쏘도록 했습니다.