Raycast 기능을 탐구하고, 기본 개념의 이해를 바탕으로 활용 방법을 정리해보자.
Raycast는 Unity 물리 엔진에서 사용하는 기능으로,
하나의 점에서 특정 방향으로 쏜 ‘가상의 레이(광선)’가 무엇과 충돌하는지를 확인하는 방식이다.
코드 기본 구조를 보고 이해해보자.
Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, floaty maxDistance, int layerMask)
bool 타입으로 반환하는 메서드의 형태로 파라미터는 다음과 같다.
매개변수 | 설명 |
---|---|
origin |
광선 시작 지점 |
direction |
광선 방향 (반드시 normalized 벡터 사용) |
hitInfo |
충돌 정보를 담는 구조체 (RaycastHit ) |
maxDistance |
광선이 도달할 최대 거리 |
layerMask |
충돌 감지할 레이어 필터 (선택 사항) |
여기서 RaycastHit 구조체를 좀 더 살펴볼 필요가 있다.
이 구조체는 충돌한 대상에 대한 상세 정보를 감고 있으며
다음과 같은 속성을 지닌다.
속성 | 설명 |
---|---|
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부터 충돌점까지 거리
}