문제 발생
최근 몬스터의 간단한 이동 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가 고장 나는 문제는 해결할 수 있었다.
'트러블 슈팅' 카테고리의 다른 글
트러블 슈팅 - Biginteger + scriptable object. (1) | 2025.03.25 |
---|---|
트러블 슈팅 - 맵 청크 자동 생성시 틈새 발생 (0) | 2025.03.21 |
트러블 슈팅 - 그림자 문제 (near plane, shadow acne) (0) | 2025.03.06 |
트러블 슈팅 - ContactPoint2D contact (0) | 2025.02.27 |
트러블 슈팅 - 유니티 폰트 오류 (0) | 2025.02.25 |