Вы можете использовать NavMeshсетку, которую Unity создает для аппроксимации пешеходных зон и препятствий в вашей среде для поиска пути и искусственного интеллекта. управляемая навигация. Подробнее
См. в Словарь Agent, NavMesh Obstacle и Off MeshОсновной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
См. в Словарь Связывание компонентов с другими компонентами Unity. Вот список того, что можно и чего нельзя делать при смешивании различных компонентов.
Агент NavMesh и физика
- Вам не нужно добавлять физические коллайдерыневидимую форму, которая используется для обработки физических столкновений объекта. Коллайдер не обязательно должен быть точно такой же формы, как сетка объекта — грубое приближение часто бывает более эффективным и неразличимым в игровом процессе. Подробнее
См. в Словарь агенты NavMesh, чтобы они избегали друг друга- То есть система навигации имитирует агентов и их реакцию на препятствия и статичный мир. Здесь статический мир — это запеченная NavMesh.
- Если вы хотите, чтобы агент NavMesh перемещал физические объекты или использовал физические триггеры:
- Добавить компонент коллайдера (если его нет)
- Добавить RigidbodyКомпонент, позволяющий воздействовать на GameObject смоделированной гравитацией и другими силами. Подробнее
См. в компоненте Словарь- Включите кинематику (Is Kinematic) — это важно!
- Кинематический означает, что твердое тело управляется чем-то другим, кроме физической симуляции.
- Если и агент NavMesh, и Rigidbody (не кинематический) активны одновременно, у вас есть состояние гонки.
- Оба компонента могут попытаться переместить агент одновременно, что приведет к неопределенному поведению.
- Вы можете использовать агент NavMesh для перемещения, например. игровой персонаж, без физики
- Установите приоритет уклонения агента игрока на небольшое число (высокий приоритет), чтобы позволить игроку проходить сквозь толпу.
- Переместите агента игрока с помощью NavMeshAgent.velocity, чтобы другие агенты могли предсказать движение игрока, чтобы избежать его.
Агент и аниматор NavMesh
- Агент NavMesh и аниматор с Основным движениемДвижением корневого узла персонажа, независимо от того, контролируется ли оно самой анимацией или извне. Подробнее
См. в Словарь может вызвать состояние гонки- Оба компонента пытаются перемещать преобразование в каждом кадре.
- Два возможных решения
- Информация всегда должна течь в одном направлении
- Любой из агентов перемещает персонажа, после чего следует анимация
- Или анимация перемещает персонажа на основе смоделированного результата.
- В противном случае у вас возникнет сложный цикл обратной связи.
-
Анимация следует за агентом
- Используйте NavMeshAgent.velocity в качестве входных данных для аниматора, чтобы примерно сопоставить движение агента с анимацией
- Надежность и простота реализации приводят к скольжению стопы там, где анимация не может соответствовать скорости.
-
Агент следует за анимацией
- Отключить NavMeshAgent.updatePosition и NavMeshAgent.updateRotation чтобы отсоединить симуляцию от расположения игровых объектов
- Используйте разницу между позицией моделируемого агента (NavMeshAgent.nextPosition) и корнем анимации (Animator.rootPosition) для расчета элементов управления анимацией
- Дополнительные сведения см. в разделе Связывание анимации и навигации.
Агент NavMesh и препятствие NavMesh
- Не смешивайте!
- При включении обоих агент будет пытаться избегать самого себя.
- Если дополнительно включено вырезание, агент пытается постоянно переназначать край вырезанного отверстия, что приводит к еще более ошибочному поведению.
- Убедитесь, что только один из них активен в любой момент времени.
- В состоянии смерти вы можете отключить агента и включить препятствие, чтобы заставить других агентов избегать его.
- Кроме того, вы можете использовать приоритеты, чтобы избежать определенных агентов.
Препятствия NavMesh и физика
- Если вы хотите, чтобы управляемый физикой объект влиял на поведение агента NavMesh.
- Добавить компонент NavMesh Obstacle к объекту, о котором должен знать агент, это позволит системе уклонения определить препятствие
- Если к игровому объекту прикреплены Rigidbody и NavMesh Obstacle, скорость препятствия автоматически определяется Rigidbody.
- Это позволяет агентам NavMesh прогнозировать движущиеся препятствия и избегать их.