[Unity] NavMesh.Move()
본문 로딩 중...
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!
NavMeshAgent에는 에이전트를 움직이는데 SetPath와 Move 함수를 사용할 수 있다.
| 기능 | Move() | SetPath() |
|---|---|---|
| 경로 탐색 | 없음 | 있음 |
| 이동 방식 | 직접 이동 | 경로 기반 이동 |
| 장애물 우회 | 없음 | 가능 |
| 자동 회전 | 없음 | 있음 |
| 용도 | 수동 이동 | AI 이동 |
| 입력값 | 이동 벡터 | NavMeshPath |
| 느낌 | 캐릭터 컨트롤러 | AI 네비게이션 |
평소 SetPath만 써서 SetPath로 이동시키려다가 동작이 너무 부자연스러워서 찾아보니 Move라는 함수가 있었다.
현재 프로젝트에서 동물을 때렸을 때 플레이어의 반대 방향으로 도망가는 동물을 만들려고 했는데
SetPath로 작성하니 로직이 이상하게 동작했다.
하지만 Move 함수를 사용하여 방향을 수동으로 정해줬고 자연스럽게 플레이어 반대방향으로 움직이도록 구현했다.
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!