[Unity] NavMesh.Move()

muchan
muchan
∙∙조회 9

NavMeshAgent에는 에이전트를 움직이는데 SetPath와 Move 함수를 사용할 수 있다.

차이점

기능Move()SetPath()
경로 탐색없음있음
이동 방식직접 이동경로 기반 이동
장애물 우회없음가능
자동 회전없음있음
용도수동 이동AI 이동
입력값이동 벡터NavMeshPath
느낌캐릭터 컨트롤러AI 네비게이션

평소 SetPath만 써서 SetPath로 이동시키려다가 동작이 너무 부자연스러워서 찾아보니 Move라는 함수가 있었다.

현재 프로젝트에서 동물을 때렸을 때 플레이어의 반대 방향으로 도망가는 동물을 만들려고 했는데

SetPath로 작성하니 로직이 이상하게 동작했다.

하지만 Move 함수를 사용하여 방향을 수동으로 정해줬고 자연스럽게 플레이어 반대방향으로 움직이도록 구현했다.

csharp
protected override void OnStateChanged(AnimalState newState)
    {
        switch (newState)
        {
            case AnimalState.Idle:
                Animator.SetInteger("State", 0);
                break;
            case AnimalState.Roam:
                Animator.SetInteger("State", 1);
                break;
            case AnimalState.Flee:
                Animator.SetInteger("State", 2);
                Agent.ResetPath();
                break;
        }
    }

여기서 AnimalState.Flee가 도망치는 상태인데 이때 꼭 ResetPath로 그 전 경로를 리셋해주고 Move를 호출해야한다

안그러면 이상하게 낑기는 현상이 발생한다..

https://docs.unity3d.com/ScriptReference/AI.NavMeshAgent.Move.html

공식 문서 안보고 뭐가 문제지 하다가 공식 문서에 적혀있는 걸 보고

앞으로 공식 문서를 꼼꼼히 봐야겠다 다짐했다

If the agent has a path it will be adjusted!