본문 바로가기

트러블 슈팅

[트러블 슈팅] NavMeshAgent.remainingDistance 무한대

문제 발생

최근 몬스터의 간단한 이동 AI를 구현하며 새로운 기능을 배워가는 과정이라 처음 보는 방식의 버그를 경험하였다.

 

몬스터의 행동을 State로 관리해서 쫒는 상태에서 일정 거리이내로 접근시 공격 상태로 전환되도록 하는 부분의 호출이 플레이어와 몬스터 사이에 벽이 있을 경우 계속해서 호출되며 State가 반복해서 설정되는 문제가 생겼다.

 


 

원인 발견 1

 

따라서 거리의 문제인가 싶어,

Debug.Log(navMeshAgent.remainingDistance); 를 통해 거리를 확인해 보니.

 

Infinity라는 무시무시한 값을 출력하고 있었다... 음수 Infinity 일수도 있고 양수 Infinity 일수도 있지만 어쨌든 거리를 확인하는 값이 튀고 있고 거리 이내에서 상태 변환을 해주는 부분에서 remainingDistance의 값을 제한하여 한 번 더 예외처리를 진행하면 문제없이 해결될 것이라 생각하였다.

 

IEnumerator Chase()
{
    //..
    if (navMeshAgent.remainingDistance <= navMeshAgent.stoppingDistance)
    {
        if(navMeshAgent.remainingDistance <= 10000f && navMeshAgent.remainingDistance >= 0.1f)// 벽을 사이에 두면 거리가 +-infinity로 되서 한번더 예외처리.
        {
            ChangeState(State.Attack);
            yield break;
        }
    }    
    //..
}

 

거리값을 0.1에서 10000사이로 제한을 하여 문제가 없도록 하였고 실행해 보았다.

 


 

해결

 

아직 벽을 끼면 정상적으로 따라오지 못하는 문제는 있지만 거리값이 Infinity까지 튀어 State가 고장 나는 문제는 해결할 수 있었다.