Deff_Dev

[Unity/C#] RayCast가 벽 뚫는 버그 해결 본문

Unity(유니티)/유니티 공부

[Unity/C#] RayCast가 벽 뚫는 버그 해결

Deff_a 2024. 6. 7. 19:50

 

플레이어의 에임에서 레이를 쏴서 상호작용할 수 있는 오브젝트를 탐색하는데, 벽 뒤에 있는 오브젝트도 탐색이 되는 버그가 발생했다.

 

Physics.Raycast(ray, out RaycastHit hit, maxCheckDistance, layerMask)

기존의 코드는 에임에서 레이를 쏘고 layerMask에 일치하는 오브젝트를 hit에 저장한다.

문제

이 코드의 문제점은 간단했다.

layerMask만 탐색을 하다 보니 default로 설정된 벽을 건너뛰고 그 뒤에 있는 상호작용 오브젝트를 탐색하게 되는 것이었다.

 

해결

모든 레이어의 오브젝트를 탐색한 후, 레이어 비교를 통해 상호작용 오브젝트를 찾는 방법으로 수정했다.

if (Physics.Raycast(ray, out RaycastHit hit, maxCheckDistance) 
&& GameManager.Instance.IsLayerMatched(layerMask.value, hit.collider.gameObject.layer))

※ IsLayerMathched 함수는 오브젝트의 레이어를 비교해주는 함수이다.

 

생각보다 쉽게 해당 문제를 해결했다.