자료 관리

RayCast

noc777 2024. 10. 23. 11:54

이번에 끝난 프로젝트를 진행하면서 충돌처리를 위해 Collision 과 Collider를 활용하였다.

OnCollisionEnter , Stay 등을 통해 충돌한 오브젝트와 상호작용을 하는 방식이라면

RayCast 는 오브젝트에서 레이저를 발사하여 레이저에 닿은 오브젝트를 판별하는 형태다.

 

Ray 에 대해 먼저 알아보자면 Ray는 뻗어나가는 직선을 뜻합니다.

 

오브젝트에서 이용하는 방식은  광선이 나갈 오브젝트의 시작점(origin) 광선의 방향(direction)을 정해주어 사용합니다.

Ray를 카메라에서 사용하는 방식도 있는데

ViewportPointToRay 는 0에 1범위의 정규화된 벡터값을 이용하고

ScreenPointToRay 픽셀 좌표를 사용한다는 차이입니다.

Ray ray = new Ray(transform.position,transform.forward); //스크립트를 붙인 오브젝트에서 쓰이는 Ray
Ray ray = Camera.main.ViewportPointToRay(new Vector3 (0.5f, 0.5f, 0)); // 카메라 중심
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //마우스 위치

 

RayCast 는  광선(Ray) 에 맞은 물체를 판별 후 후처리를 하는 방식을 통틀어 말하는 겁니다.

RayCastHit, MaxDistance,LayerMask 등이 포함됩니다.

 

RayCastHit 메서드는 RayCast 에 맞은 오브젝트의 객체의 정보가 담겨져있습니다.

RayCastHit.point  레이캐스팅이 감지된 위치값

RayCastHit.distance  Ray의 시작점에서 충돌된 지점까지의 거리

RayCastHit.transform  충돌된 객체의 transform 에 대한 참조 

 

디버그를 통해 레이의 범위를 확인하려면 Gizmos.DrawRay 프로퍼티를 통해 확인 할 수있습니다.

Gizmos.DrawRay(위치,방향 및 거리);

Vector3.down은 (0,-1,0)인 값이므로 0.2f 를 곱해주면 (0,-0.2f,0) 인 값이 됩니다. 이렇게 OnDrawGizmosSelected 메서드 안에 쓰고 보면

 

씬 창에서도 이렇게 Ray의 방향과 거리를 알 수 있습니다.

'자료 관리' 카테고리의 다른 글

시간 복잡도  (0) 2024.10.23
오브젝트 풀링  (0) 2024.10.23
Rigidbody - ForceMode  (1) 2024.10.22
유니티 인풋 필드(Input Field)  (1) 2024.10.12
캐스팅 연산자 as  (1) 2024.10.10