Что это: Компонент Unity (MonoBehaviour) для навигации NPC поверх NavMeshAgent: Follow / Patrol / Combined, переключение поведения без дополнительных MonoBehaviour на объекте (стратегии в pure C#). Файл: Assets/Neoxider/Scripts/NPC/NpcNavigation.cs.
Как использовать:
- Добавьте на NPC
NavMeshAgentиNpcNavigation. - Выберите режим Mode:
FollowTarget,PatrolилиCombined. - Настройте соответствующие поля (цель, патрульные точки/зону, агро-дистанции).
- Чтобы включать/выключать бота в рантайме, используйте IsActive:
true— ходит,false— стоит.
- На объект NPC добавьте:
NavMeshAgentNeoxider/NPC/NpcNavigation
- Выберите режим в инспекторе
NpcNavigation:FollowTargetPatrolCombined
- Заполните настройки цели/патруля/агро в
NpcNavigation.
Следование за followTarget (с поддержкой triggerDistance и ограничивающей зоны followMovementBounds).
Патруль по точкам patrolPoints или по зоне patrolZone (если задана, точки игнорируются).
Патрулирует (points/zone), но при приближении к combinedTarget на расстояние aggroDistance переключается на преследование.\nПри удалении на расстояние больше maxFollowDistance возвращается к патрулю (0 = не возвращаться).
Если целевая точка не попадает на NavMesh, используется ring-search (поиск по кольцам вокруг точки). Если точка всё равно недоступна:
- в Patrol/Combined (в режиме патруля) по умолчанию NPC автоматически пытается перейти к следующей точке (или выбрать другую случайную точку в
patrolZone), чтобы не застревать; - в Combined (в режиме преследования) при недоступной цели NPC возвращается к патрулю.
Основные методы:
SetMode(NavigationMode)SetFollowTarget(Transform)SetCombinedTarget(Transform)SetDestination(Vector3)SetRunning(bool)SetSpeed(float)Stop(),Resume()
- IsActive (Inspector / свойство
IsActive) — глобальный переключатель. Еслиfalse, компонент каждый кадр останавливает агент (agent.isStopped = true) и не тикает поведение. Stop()— выключаетIsActiveи останавливает агент.Resume()— включаетIsActiveи снимаетagent.isStopped.
Также NpcNavigation поднимает общие события:
onMovementStarted,onMovementStoppedonDestinationReached,onPathBlocked,onPathUpdated,onPathStatusChangedonPatrolStarted,onPatrolPointReached,onPatrolCompletedonStartFollowing,onStopFollowingonSpeedChanged
drawGizmos/drawPathGizmos: визуализация пути, радиусов, зон (bounds / patrolZone) через Gizmos.debugMode: лог решений (например, старт/стоп преследования, unreachable и т.п.) и полеlastDecision.
NpcNavigation поднимает общие события:
onMovementStarted,onMovementStoppedonDestinationReached,onPathBlocked,onPathUpdated,onPathStatusChangedonPatrolStarted,onPatrolPointReached,onPatrolCompletedonStartFollowing,onStopFollowingonSpeedChanged
Чтобы аниматор NPC автоматически реагировал на движение (ходьба/бег по скорости агента), добавьте на тот же объект компонент NpcAnimatorDriver и укажите Animator и имена параметров (по умолчанию Speed, IsMoving).
Если нужен автоматический боевой NPC, не расширяйте NpcNavigation отдельным большим custom-скриптом. Рекомендуемый путь:
- движение оставить в
NpcNavigation - таргетинг вынести в
RpgTargetSelector - атаку исполнять через
RpgAttackController - orchestration держать в NpcRpgCombatBrain
Так навигация остаётся изолированным модулем и не превращается в боевой монолит.
AiNavigation остаётся для старых проектов, но помечен как устаревший. Для новых проектов используйте NpcNavigation.