
레이라는 가상의 선을 일직선상으로 발사하여 닿는 오브젝트를 검사하는 방식이다. 닿은 오브젝트 대상의 콜라이더를 판별하여 로직을 수행하는 역할을 해준다.
따라서 레이캐스트는 주로 충돌감지 역할을 하기 위해 사용되는데 대표적인 사례로 FPS게임, 마우스로 선택하는 기능 등을 만들 수 있다.
FPS게임에서는 주로 히트스캔(즉시타격판정)을 구현하기 위해 주로 사용되며 또는 저격총에서 적을 판별하게 만드는 기능도 레이캐스트를 통해 구현된다.
마우스로 선택되어 상호작용하는 원리는 마우스를 통해 카메라가 갖고있는 레이캐스트로 충돌검사를 하기 때문이다.
//레이를 정의하는 레이 구조체
Ray ray = new Ray(레이가 나갈 오브젝트, 레이의 방향) //레이의 방향은 주로 transform.forward가 쓰인다
RaycastHit hit //레이가 충돌했을 때 결과를 저장하는 구조체
Physics.Raycast(ray, out hit) //Physics.Raycast는 bool타입을 반환한다.
앞서 쓰인 코드를 전부 하나로 묶어주면
if(Physics.Raycast(ray, out hit)
{
Debug.Log(hit.collider.gameObject.name); // hit와 충돌한 콜라이더의 오브젝트 이름을 로그로 출력해준다.
}
다음과 같은 간단한 레이캐스트를 만들어 낼 수 있다.
Physics.Raycast(레이, out 레이캐스트히트, 최대범위, 레이어마스크 사용여부, 트리거콜라이더 사용여부)
최대범위: float값으로 설정가능
레이어 마스크: 특정 레이어가 포함되거나 제외되게 설정 가능
트리거콜라이더 사용여부: QueryTriggerInteraction라는 구조체를 사용해 맞는 오브젝트의 트리거 적중여부를 판단
Debug.DrawRay(gameObject.transform.position, Vector3.forward * Ray의 거리, Color.Red)
// Ray와 별개로 작동하는 레이드로우

레이캐스트는 효율적인 충돌감지와 충돌관련 로직의 효율성을 증가시킬 수 있다. 또한 게임 구현에 있어 필수적인 요소이다.
하지만 연산량이 많이 요구되어 레이어 마스크, 거리 조절로 충돌 연산을 줄일 필요가 있으며 레이캐스트를 너무 많이 사용하면 최적화에 문제가 있을 수 있기 때문에 적절한 사용이 요구된다