[Unity] Raycast

AsiaticRicecake·2025년 4월 17일

1. 📖 Raycast

NPC나 모험 중 상자를 발견할 때 두 오브젝트가 꼭 붙어야 상호작용이 일어나는 건 아닙니다.
조금 떨어져 있어도 "상인에게 말을 건다", "상자 열기" 가 뜨는 것을 알 수 있습니다.
FPS게임에서 사용자 가리키면 서로 붙어있는 상태가 아니어도 사용자의 닉네임이 표시됩니다.

그 부분을 처리하는 것이 레이캐스트가 하는 일입니다.

보이지 않는 레이저쏘아서 그 경로에 있는 오브젝트감지하는 기능입니다.

if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hitInfo, 10f))
{
    Debug.Log(hitInfo.collider.gameObject.name); // 닿으면 오브젝트 이름 출력
}
else
{
    Debug.Log("None"); // 닿지 않으면 None 출력
}

transform.position에서 시작해서 transform.forward 방향으로
10 단위 거리까지 발사하는 코드입니다.


2. 📖 기즈모

기즈모(Gizmos)는 주로 시각적 디버깅과 설정 작업을 도와주는 도구입니다.

게임 오브젝트와 관련된 그래픽을 표시하여
개발자가 게임의 상태를 더 쉽게 이해하고 문제를 해결할 수 있도록 돕습니다.

2-1 🔖 기즈모 함수

기즈모에서 자주 사용되는 함수를 한번 알아보겠습니다.

함수설명
Gizmos.DrawLine(Vector3 a, Vector3 b)두 점 사이에 선 그리기
Gizmos.DrawWireSphere(Vector3 center, float radius)테두리만 있는 원형 표시
Gizmos.DrawSphere(Vector3 center, float radius)채워진 구 표시
Gizmos.DrawCube(Vector3 center, Vector3 size)채워진 정육면체
Gizmos.DrawWireCube(Vector3 center, Vector3 size)테두리 정육면체
Gizmos.color = Color.red그릴 색상 설정

2-2 🖥️ 기즈모를 이용한 레이캐스트 확인

기즈모를 이용하면 레이캐스트의 상황을 쉽게 볼 수 있도록 도와줍니다.

레이캐스트의 영역을 기즈모로 시각화하면,
특정 영역이 실제로 어떻게 설정되었는지 쉽게 확인할 수 있습니다.

if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hitInfo, 10f))
{
    Debug.Log(hitInfo.collider.gameObject.name);
    Debug.DrawLine(transform.position, hitInfo.point, Color.green);
}
else
{
    Debug.Log("None");
    Debug.DrawLine(transform.position, transform.position + transform.forward * 10f, Color.red);
}

이런 식으로 레이캐스트를 통해 설정한 레이저가 보이는 것을 알 수 있습니다.
물체에 안 닿았을 때는 빨간색으로 되도록 설정했습니다.

물체에 닿는 경우 초록색으로 변하도록 만들었습니다.

0개의 댓글