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 단위 거리까지 발사하는 코드입니다.
기즈모(Gizmos)는 주로 시각적 디버깅과 설정 작업을 도와주는 도구입니다.
게임 오브젝트와 관련된 그래픽을 표시하여
개발자가 게임의 상태를 더 쉽게 이해하고 문제를 해결할 수 있도록 돕습니다.
기즈모에서 자주 사용되는 함수를 한번 알아보겠습니다.
| 함수 | 설명 |
|---|---|
| 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 | 그릴 색상 설정 |
기즈모를 이용하면 레이캐스트의 상황을 쉽게 볼 수 있도록 도와줍니다.
레이캐스트의 영역을 기즈모로 시각화하면,
특정 영역이 실제로 어떻게 설정되었는지 쉽게 확인할 수 있습니다.
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);
}

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

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