문제 상황
NavMesh 2D를 적용한 이후 플레이어 이동에 이상 현상이 발생했다.
이동 속도가 눈에 띄게 느려졌고, 벽에 끼이면 빠져나오지 못하는 문제가 나타났다.
NavMesh를 비활성화하면 정상적으로 이동했다.
원인 분석
플레이어의 이동은 Rigidbody2D.MovePosition()을 통해 처리하고 있었으나,
같은 오브젝트에 NavMeshAgent가 함께 사용되고 있었다.
NavMeshAgent에는 별도의 이동 명령을 주지 않았기 때문에,
Agent가 NavMesh 상의 유효한 위치로 Transform을 보정하려는 동작이 매 프레임 발생했고,
이로 인해 Rigidbody 기반 이동 로직과 충돌하면서 속도 저하, 지터, 벽 끼임 현상이 발생했다.
해결 방법
해결 방법은 다음 두 가지가 있다.
- 방법 1
매 프레임 agent.nextPosition을 Rigidbody의 실제 위치와 동기화하여
NavMeshAgent의 위치 인식을 맞춰준다. - 방법 2 (선택)
NavMeshAgent의 자동 위치 갱신 기능인 updatePosition과 updateRotation을 비활성화하여
NavMesh가 이동에 직접 관여하지 않도록 한다.
현재 프로젝트에서는 기존 이동 로직에 영향을 주는 것을 방지하기 위해
NavMeshAgent.updatePosition = false 로 설정하여 문제를 해결했다.
느낀점
NavMeshAgent와 Rigidbody 이동을 동시에 사용할 경우,
서로 다른 위치 보정 기준으로 인해 의도치 않은 충돌이 발생할 수 있다는 것을 알게 되었다.
NavMesh를 이동 제어가 아닌 판정용 시스템으로 사용할 경우,
Agent의 자동 위치 갱신을 비활성화하는 것이 안정적인 선택이라고 느꼈다.
'Unity > 트러블 슈팅' 카테고리의 다른 글
| [Unity] StateMachineBehaviour 정보 초기화 현상 (0) | 2025.07.22 |
|---|---|
| [Unity] 파티클 시스템 SetActive false -> true 이후 Prewarm 이슈 (1) | 2025.07.21 |
| [Unity] 오브젝트 풀링 트러블 슈팅 (0) | 2025.07.09 |
| [Unity] InputAction의 performed 이벤트 사용 시 주의점 (0) | 2025.07.02 |
| [Unity] UI가 작동하지 않는 이유 (0) | 2025.06.27 |