트러블슈팅 : WayPoints에 못닿는 문제

문제 상황 :  Waypoint 들을 인식하는 간단한 경로 확인 AI를 만들었는데, 모델이 바뀌었을 때 제대로 대응하지 못하는 상황 발생. 모델 본연의 문제인가 했지만 닿는다는 부분은 육안 상 별 문제가 없었던 점에 착안하여 작동 방식이 유사한 코드 교체로 해결하였다.

문제 재현 : 하루 왠 종일 Node 하나 두고 드리프트만 하고 있음

 

에셋의 3D 모델 자체의 문제인가 싶었지만 현재 만들고 있는 로직 자체와 도착 판정 거리의 상호작용이 영 시원찮아서 충분히 발생 할 수 있었던 문제였다.

문제가 있었을 때의 스크립트는 두 개를 동시에 처리 했다 : 회전과 전진.

이 내용의 문제는 차가 targetPosition 에 가까워지지만, 정확히 향하진 않고 turnSpeed 에 따라 회전 중인 셈이다. 이 때 아래 코드에 적힌 Translate(Vector3.forward) 는 차가 바라보는 정면을 살짝 빗겨 나간다. 차는 targetPosition 을 스쳐 지나갔으니 다시 가야하는데, 이게 무한 반복 되는 것이다.

// 차량 단위 스크립트의 Update 문 내에..

Vector3 directionToTarget = (targetPosition - transform.position).normalized;
        directionToTarget.y = 0; 
        if (directionToTarget != Vector3.zero)
        {
            Quaternion targetRotation = Quaternion.LookRotation(directionToTarget);
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, turnSpeed * Time.deltaTime);
        }
        
        
        // [수정] 차량의 '앞' 방향으로 전진 (이제 moveSpeed가 아닌 currentSpeed 사용)
        transform.Translate(Vector3.forward * currentSpeed * Time.deltaTime);

 

차가 정면으로 가기보단 목표 지점으로 향해 로직을 수정하는 방향을 선택했다. transform.Translate 대신 Vector3.MoveTowards 를 사용해서, 현재 위치에서 목표 위치로 최대 속도만큼 직선으로 이동시키게 될 것이다.

Vector3 directionToTarget = (targetPosition - transform.position).normalized;
    directionToTarget.y = 0; 

    if (directionToTarget != Vector3.zero)
    {
        Quaternion targetRotation = Quaternion.LookRotation(directionToTarget);
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, turnSpeed * Time.deltaTime);
    }

    transform.position = Vector3.MoveTowards(transform.position, targetPosition, currentSpeed * Time.deltaTime);

 

 

문제 해결 : Capsule 잘 따라 가는중!!