Unity - 3D 6일차 학습

규수·2026년 5월 12일

개발 공부 일지

목록 보기
41/44

오늘은 Unity에서 제공하는 보이지 않는 레이저를 쏘아 무엇이 있는지를 확인할 수 있는 기능인 Raycast에 대해 정리해보겠습니다.

Raycast?

Raycast는 광선이 발사되는 시작점(Origin)에서 발사되는 벡터 방향(Direction)으로 얼마만큼 나아가는지(Distance)를 설정하여 보이지 않는 광선을 발사하여 광선에 맞은 정보(hit)를 파악하는 기능입니다.

Raycast의 기본구조는 다음과 같습니다.

Physics.Raycast(시작위치, 방향, out hiy정보, 거리, 레이어마스크);

  • 시작 위치: 광선이 발사되는 위치(ex. 카메라위치)
  • 방향: 광선을 발사할 방향(ex. transform.forward)
  • out hit 정보: 충돌된 오브젝트 정보
  • 거리: Ray의 길이
  • 레이어마스크: 특정 레이어에만 반응하게 설정
public LayerMask enemyLayer;

void Update()
{
    if (Input.GetMouseButtonDown(0)) // 클릭 시
    {
        RaycastHit hit; // hit 정보를 담을 변수

        if (Physics.Raycast(transform.position, transform.forward, out hit, 100f, enemyLayer))
        {
            Debug.Log("맞은 오브젝트: " + hit.collider.name);
        }
    }
}

이때 Hit된 정보를 기반으로 다음의 정보를 확인할 수 있습니다.

  1. hit.collider
    광선에 맞은 실제 오브젝트로 대상이 적인지 문인지 파악할 수 있습니다.

  2. hit.point 충돌이 일어난 월드 좌표(X, Y, Z)입니다. 해당 위치에 보통 피격 이펙트 같은걸 생성시킵니다.

  3. hit.normal
    충돌한 표면이 바라보는 법선 방향(수직 벡터)입니다. 탄흔 이미지를 벽면 각도에 맞춰 회전시키거나 도탄 방향을 계산할 때 필수적입니다.

  4. hit.distance
    Origin부터 충돌점까지의 거리입니다.
    무기의 유효 사거리나 적 AI의 감지 거리를 검증할 때 사용합니다.

Raycast를 다음과 같은 필터링을 통해 최적화를 진행할 수 있습니다.

  1. LayerMask
    검사할 대상을 제한합니다. 레이어, 비트 연산을 사용하여 동작합니다.

  2. QueryTriggerInteraction
    물리적 충돌체가 아닌 영역을 맞출지 결정합니다.

  3. MaxDistance
    광선을 무한적인 거리로 쏘는 것은 성능에 좋지 않습니다. 무기 사거리, 상호 작용 가능 거리 등 목적에 맞는 최소한의 길이만 지정해야합니다.

0개의 댓글