개요

Raycast 기능을 탐구하고, 기본 개념의 이해를 바탕으로 활용 방법을 정리해보자.

Raycast란?

Raycast는 Unity 물리 엔진에서 사용하는 기능으로,

하나의 점에서 특정 방향으로 쏜 ‘가상의 레이(광선)’가 무엇과 충돌하는지를 확인하는 방식이다.

코드 기본 구조를 보고 이해해보자.

Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, floaty maxDistance, int layerMask)

image.png

bool 타입으로 반환하는 메서드의 형태로 파라미터는 다음과 같다.

매개변수 설명
origin 광선 시작 지점
direction 광선 방향 (반드시 normalized 벡터 사용)
hitInfo 충돌 정보를 담는 구조체 (RaycastHit)
maxDistance 광선이 도달할 최대 거리
layerMask 충돌 감지할 레이어 필터 (선택 사항)

여기서 RaycastHit 구조체를 좀 더 살펴볼 필요가 있다.

RaycastHit 구조체

image.png

이 구조체는 충돌한 대상에 대한 상세 정보를 감고 있으며

다음과 같은 속성을 지닌다.

속성 설명
collider 충돌한 Collider
point 충돌 지점 (월드 좌표)
normal 충돌 표면의 법선 벡터
distance origin에서 충돌 지점까지 거리
rigidbody 충돌한 객체의 Rigidbody
transform 충돌한 객체의 Transform
if (Physics.Raycast(origin, direction, out RaycastHit hit, 100f))
{
    // 예시: 정보 얻기
    Collider targetCollider = hit.collider;                // 충돌한 콜라이더
    GameObject targetObject = hit.collider.gameObject;     // 충돌한 게임오브젝트
    Transform targetTransform = hit.transform;             // Transform 직접 접근 가능
    Rigidbody rb = hit.rigidbody;                          // Rigidbody 있으면 가져옴
    Vector3 hitPoint = hit.point;                          // 충돌 위치
    Vector3 normal = hit.normal;                           // 충돌 표면의 법선
    float distance = hit.distance;                         // origin부터 충돌점까지 거리
}