Unity

Unity 트러블 슈팅 - NavMeshAgent가 NavMesh에 배치되지 않았다는 오류

우대비 2025. 3. 26. 16:54
반응형

🚀 Trouble-Shooting


1. 문제 상황 발생

NavMesh를 런타임중에 빌드한 후에, 몬스터를 배치하면 Agent가 NavMesh에 제대로 배치되어있지 않다는 오류가 발생함. 

 

2. 원인 추론

NavMesh 빌드 함수 호출 이후에 곧바로 몬스터 생성 함수가 호출되는 것을 확인.

NavMesh가 제대로 완성되기 전에 몬스터가 배치된 것은 아닐까 추측했습니다.

Invoke함수를 통해 3초 정도 늦게 생성되도록 했지만, 문제는 해결되지 않았습니다.

 

 

 

3. 해결 방안

3.1 첫번 째 해결법

인터넷 검색을 통해 같은 문제를 겪고 있는 사람을 찾았고, Awake에서 naveMesh.enable을 false로 해주고 0.025초 뒤에 true로 변경해주면 정상적으로 작동한다는 것을 확인했습니다. 실제로 적용해보니 제 프로젝트에서도 오류가 사라졌습니다.

 

위 같은 방법은 오류를 회피하는 방법이지 해결하는 방법은 아니라고 생각했습니다.

이에, 더 나은 방법이 없나 찾아봤습니다.

 

 

3.2 두번 째 해결법

검색을 통해 재미있는 글을 발견했습니다. 유니티에서는 기본적으로 NavMeshAgent는 Transform을 통한 좌표 이동을 권장하지 않습니다.

NavMesh는 굉장히 예민한 녀석이기 때문에 유니티 내부에서 알아서 처리할 수 있도록 해줘야합니다. (가령 agent가 navMesh와 아주 살짝만 떨어져도 붙어있지 않다는 오류가 발생합니다.) 그런데 이 것을 Transform을 통해 강제로 이동을 시켰기 때문에 문제가 발생했던 것이었습니다.

 

첫번 째 해결법에서 NavMeshAgent를 false로 했다가 true로 하는 과정에서 agent가 자체적으로 초기화되는 로직이 동작했던 것이었고 이 동작속에서 오류를 회피했던 것 이었습니다.

좌표를 한번에 이동시키고싶으면 Transform이 아닌 NavMeshAgent의 Warp 함수를 통해 이동시키면 깔끔하게 이동됩니다.

 

 

4. 결과 확인

 

5마리부터 150마리까지 오류 없이 배치가 완료되었습니다.

반응형
LIST