[TIL] 18일 차 - RayCast에 대한 트러블슈팅

ChangBeom·2025년 2월 19일

TIL

목록 보기
19/53
post-thumbnail

[배경]

Unity 2022.3.17f 버전을 사용하여 Metaverse 게임을 개발하던 도중 Player가 Raycast를 쏘고 그 RayCast가 상호작용 가능한 오브젝트에 닿았을 때 상호작용 버튼이 뭔지 알려주는 기능을 구현하려는 상황.

[발단]

Raycast2D를 PlayerController에서 생성해서 Player 오브젝트에서 쏘도록 만들고, 상호작용 가능한 오브젝트의 Tag를 통해 충돌 판정을 하려고 했으나, 아무반응 없는 현상이 발생했다.

[전개]

그래서 문제를 해결하기 위해 아래와 같은 시도를 했습니다.

  • Raycast의 길이를 대폭 늘려서 테스트
  • 충돌한 객체의 이름과 태그를 Debug.Log를 통해 출력
  • Raycast를 다른 오브젝트에서 쏴보기도 하고, Player 오브젝트에서 좀 떨어진 부분부터 쏴보기도 함.

이 과정에서 무엇이 문제인지 한 가지 가능성을 생각했다.
Raycast는 여러 오브젝트와 충돌하고 있어도 처음 충돌한 오브젝트 이외의 다른 오브젝트와 충돌판정을 내지 않는다.

[위기]

위 가설이 사실임을 증명하기 위해 태그가 Player면 충돌을 무시하는 코드를 짜려고 했으나, 도중에 LayerMask 에 대해 알게 되었고, 태그를 활용한 코드는 잘못된 것을 깨달았다. 그래서 LayerMask를 활용한 방안을 모색했다.

[절정]

그래서 결국 LayerMask를 활용해서 다음과 같이 코드를 짰다.

충돌한 물체가 상호작용 가능한 오브젝트인지 판단하는 것이 아니라 애초에 Raycast가 상호작용 가능한 오브젝트만을 충돌하도록 만드는 방법이다.

[결말]

LayerMask를 활용하여 완벽하게 원하는 기능을 구현할 수 있었다.

다음에도 Raycast를 사용할 일이 생기면 태그가 아닌 LayerMask를 활용하는 방법을 사용하자.

0개의 댓글