Классические конечные автоматы (FSM) и поведенческие деревья (BT) перестают справляться, когда NPC должен адаптироваться к нестандартным тактикам игрока. Противник застревает у стены, союзник игнорирует фланговый обход, пешеходы действуют по шаблону — каждый такой баг требует правки вручную. В современных AAA-проектах с сотнями типов NPC такой подход приводит к неделям отладки. Свяжитесь с нами, чтобы обсудить вашу задачу и получить предварительную оценку.
Мы разрабатываем системы поведения NPC с использованием Reinforcement Learning (RL) и гибридных архитектур уже более 10 лет. За это время реализовали AI для 50+ NPC в шутерах, RPG и симуляторах. Клиенты экономят до 40% бюджета на итерациях баланса NPC — инвестиции окупаются за 3–6 месяцев. Гибрид BT+RL на 30% быстрее в разработке, чем чистый RL, и на 60% адаптивнее чистого BT. В 80% проектов выбирают именно гибрид.
Почему RL побеждает FSM в современных AAA-играх?
FSM/BT ограничения:
- Разработчик описывает каждый переход — при добавлении нового поведения дерево переписывается.
- Edge-кейсы (застревание, одинаковые паттерны) исправляются только патчами.
- Масштабирование на 50+ типов NPC — недели ручной работы.
RL преимущества:
- NPC учится на взаимодействии с игроком, адаптируясь к его стилю.
- Единый фреймворк для разных типов поведения: боевые, социальные, экономические.
- Self-play (обучение против предыдущих версий себя) автоматически генерирует сложные тактики.
Сравним подходы в таблице:
| Параметр | FSM/BT | RL (на базе PPO) |
|---|---|---|
| Адаптивность | Статична, задаётся дизайнером | Динамическая, учится на опыте |
| Время разработки нового поведения | Дни — недели (ручное кодирование) | Часы — дни (дообучение модели) |
| Непредсказуемость | Низкая (предсказуемые паттерны) | Средняя — высокая |
| Контроль гейм-дизайнера | Полный | Через reward function и BT+RL гибрид |
| Production-readiness | Высокая (проверено годами) | Средняя (требует гибрида) |
Как гибрид BT+RL даёт контроль гейм-дизайнерам?
Чистый RL в production — редкость: непредсказуемость неприемлема для дизайнеров. Гибрид решает проблему:
BehaviourTree:
→ Selector:
→ IsPlayerVisible AND HealthHigh → RL AggressivePolicy
→ IsPlayerVisible AND HealthLow → RL RetreatPolicy
→ PatrolTask (детерминированный)
RL-политика отвечает за конкретные фазы боя (атака, отступление), BT контролирует high-level структуру. Дизайнеры управляют условиями перехода, RL наполняет детали — NPC фланкирует, использует укрытия, ставит подавляющий огонь.
Стек и пример реализации: Unity ML-Agents
Стандартный инструмент для игровых NPC — Unity ML-Agents (PPO, self-play). Пример компонента агента на C#:
public class NPCCombatAgent : Agent
{
public override void CollectObservations(VectorSensor sensor)
{
sensor.AddObservation(RelativePlayerPosition);
sensor.AddObservation(PlayerVelocity);
sensor.AddObservation(Health / MaxHealth);
sensor.AddObservation(Ammo / MaxAmmo);
sensor.AddObservation(IsInCover);
sensor.AddObservation(NearestCoverDistance);
}
public override void OnActionReceived(ActionBuffers actions)
{
float moveX = actions.ContinuousActions[0];
float moveZ = actions.ContinuousActions[1];
bool shoot = actions.DiscreteActions[0] == 1;
bool takeCover = actions.DiscreteActions[1] == 1;
MoveNPC(moveX, moveZ);
if (shoot) Shoot();
if (takeCover) SeekCover();
}
public override void OnEpisodeBegin()
{
ResetPosition();
Health = MaxHealth;
}
}
Reward-функция для боевого NPC:
void FixedUpdate()
{
if (DamagedPlayer()) AddReward(1.0f);
if (TookDamage()) AddReward(-0.5f);
if (Killed()) AddReward(-10.0f);
if (KilledPlayer()) AddReward(10.0f);
AddReward(-0.001f); // штраф за бездействие
}
Self-Play для боевых NPC
Для обучения NPC необходим противник, способный создать вызов. Против random-агента NPC научится только базовым паттернам, поэтому применяем self-play: агент играет против предыдущих версий себя. Официальная документация Unity ML-Agents подтверждает, что self-play позволяет непрерывно улучшать политику, играя против собственных копий. Конфиг для ML-Agents:
behaviors:
NPC:
trainer_type: ppo
self_play:
save_steps: 50000
team_change: 100000
swap_steps: 2000
play_against_latest_model_ratio: 0.5
window: 10
Self-play обеспечивает постоянное улучшение: нет reward hacking против конкретной стратегии, тактики становятся глубже.
Observation Design
- Ray Perception: лучевые сенсоры (до 20 лучей) видят теги объектов + расстояние. Быстро, эффективно.
- Camera Sensor: CNN обрабатывает render texture — медленнее, но даёт реалистичную «зрительную систему».
Типы поведений для обучения
Тактические: фланкирование, укрытия, подавляющий огонь, retreat-and-heal. Социальные (NPC-жители): реакция на игрока (страх, любопытство, агрессия), адаптация к репутации. Экономические (торговцы): ценообразование на основе спроса, принятие предложений.
Сравнение типов поведений по сложности реализации и времени обучения:
| Тип поведения | Сложность | Время обучения (базовый NPC) |
|---|---|---|
| Тактическое (бой) | Высокая | 6–10 недель |
| Социальное (жители) | Средняя | 4–6 недель |
| Экономическое (торговцы) | Низкая–средняя | 3–5 недель |
Scalable Training
Обучение тысяч NPC параллельно:
from mlagents_envs.environment import UnityEnvironment
from mlagents_envs.envs.unity_parallel_env import UnityParallelEnv
env = UnityParallelEnv(UnityEnvironment("game.x86_64"))
# один step обрабатывает всех агентов одновременно
GPU inference: после обучения экспорт в ONNX → Barracuda runtime прямо в Unity. Никакого Python на продакшене. Для масштабирования используем до 1000 параллельных агентов за один step.
Типичные ошибки при обучении NPC
- Неправильная reward-функция приводит к нежелательному поведению (например, NPC учится проигрывать, чтобы получать награду за смерть).
- Слишком сложное пространство наблюдений замедляет сходимость — используйте только релевантные признаки.
- Игнорирование self-play: обучение против статичного противника даёт слабого NPC.
Процесс работы и что входит
- Аналитика: изучаем механики игры, определяем типы NPC и требования к поведению.
- Проектирование: разрабатываем архитектуру (BT+RL гибрид, reward-функции, наблюдения).
- Реализация: обучаем модели, интегрируем в игровой движок, настраиваем inference.
- Тестирование: проверяем адаптивность, отсутствие багов, соответствие гейм-дизайну.
- Деплой: экспорт в ONNX, оптимизация для целевых платформ (PC, консоли, мобильные).
Отметим: что входит в результат:
- Документация по архитектуре и обучению.
- Исходные коды агентов и конфигов.
- Обученная ONNX-модель.
- Интеграция в ваш проект.
- Поддержка в течение месяца.
Сроки ориентировочно
Базовый боевой NPC с self-play — от 6 недель. Полноценная система с гибридом BT+RL, несколькими типами поведений и production-ready inference — от 14 до 20 недель. Стоимость рассчитывается индивидуально под ваш проект. Получите консультацию — поможем определить подходящую архитектуру для вашей игры. Закажите разработку NPC AI уже сегодня и получите предварительный анализ в течение 2 дней.
Более 10 лет мы занимаемся ML в геймдеве — реализовали NPC AI для шутеров, RPG и симуляторов. Если хотите обсудить вашу задачу, свяжитесь с нами — оценим проект и предложим решение.







