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 함수는 오브젝트의 레이어를 비교해주는 함수이다.

 

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

'Unity(유니티) > 유니티 공부' 카테고리의 다른 글

[Unity/C#] 파이프라인, URP  (2) 2024.06.13
[Unity/C#] Func  (0) 2024.06.12
[Unity/C#] 3D 문 상호작용  (0) 2024.06.05
[Unity/C#] TextMeshPro Material  (0) 2024.05.30
[Unity/C#] 법선 벡터  (0) 2024.05.29