내비메시 에이전트(NavMesh Agent), 내비메시 장애물(NavMesh Obstacle), 오프 메시 링크(Off Mesh Link) 컴포넌트는 다른 Unity 컴포넌트와 함께 사용할 수 있습니다. 다른 컴포넌트를 함께 사용할 때에는 다음과 같은 규칙을 따라야 합니다.
내비메시 에이전트 및 물리
서로 충돌하지 않도록 내비메시 에이전트에 물리 콜라이더를 추가하지 않아도 됩니다.
내비게이션 시스템이 에이전트뿐만 아니라 장애물과 정적 월드에 대한 에이전트의 반응까지 시뮬레이션하기 때문입니다. 여기서 정적 월드는 베이크된 내비메시입니다.
내비메시 에이전트가 물리 오브젝트를 푸시하거나 물리 트리거를 사용하도록 하려면 다음과 같이 수행해야 합니다.
콜라이더 컴포넌트를 추가합니다(없을 경우).
리지드바디 컴포넌트를 추가합니다.
키네마틱(물리 법칙에 영향을 받지 않음)을 활성화합니다. 이 작업은 매우 중요합니다!
키네마틱이란 리지드바디가 물리 시뮬레이션 이외의 다른 요소에 의해 제어된다는 뜻입니다.
내비메시 에이전트와 리지드바디(키네마틱이 아님)를 동시에 활성화하면 경합 조건이 발생합니다.
두 컴포넌트가 동시에 에이전트를 움직이려고 하여 정의되지 않은 동작이 발생할 수 있습니다.
내비메시 에이전트를 사용하여 물리 없이 플레이어 캐릭터 등을 움직일 수 있습니다.
플레이어 에이전트의 회피 우선 순위를 작은 숫자(우선 순위가 높음)로 설정하여 플레이어가 군중 사이를 헤치고 지나갈 수 있게 합니다.
Move the player agent using NavMeshAgent.velocity, so that other agents can predict the player movement to avoid the player.
내비메시 에이전트 및 애니메이터
내비메시 에이전트와 루트 모션이 있는 애니메이터는 경합 조건을 유발할 수 있습니다.
두 컴포넌트가 각 프레임에서 트랜스폼을 이동시키려고 합니다.
두 가지 해결 방법
정보는 항상 한 방향으로 흘러야 합니다.
에이전트가 캐릭터를 움직이고 애니메이션이 이를 따르거나,
시뮬레이션 결과에 기반하여 애니메이션이 캐릭터를 움직여야 합니다.
그렇지 않으면 피드백 루프를 디버그하기가 어려워집니다.
애니메이션이 에이전트를 따르는 경우
Use the NavMeshAgent.velocity as input to the Animator to roughly match the agent’s movement to the animations
확실하고 손쉬운 방법이지만, 애니메이션이 속도를 따라가지 못하면 발이 미끄러지는 결과가 나타날 수 있습니다.