Ваш моб-шутер: ворог бачить гравця крізь стіни, реагує за 0.02 секунди — гравці йдуть через день. Знайомо? Це типова помилка: відсутність системи сприйняття і наївний скінченний автомат. Ми в команді з 5+ роками досвіду в геймдеві вирішуємо це завдання за 2–4 тижні. Маючи 5+ років у геймдеві, ми реалізували AI для 15+ мобільних ігор, знижуючи churn гравців в середньому на 20%. Комбінуємо дерева поведінки (Behaviour Trees), фізично чесні сенсори та адаптивну складність (DDA). Розробка AI противників — одна з наших ключових компетенцій. Результат: противник, який відчувається живим, але не читерить. Геймдев — наша пристрасть. Завдяки нашому AI ігри з аудиторією понад 1 млн користувачів показують стабільну продуктивність. Ми — команда з 10+ фахівців з досвідом від 5 років, сертифіковані розробники Unity та Godot.
Behaviour Trees: чому вони кращі за FSM?
Behaviour Trees — ієрархічна структура з Selector, Sequence, Condition, Action нод. У 3–5 разів простіше масштабувати, ніж FSM: замість заплутаного графа станів — чітке дерево. При 10+ поведінках BT прискорює налагодження в 2–3 рази. FSM підходить для 3–4 станів (Patrol→Chase→Attack), але при ускладненні граф вибухає. BT — вибір для нетривіальної бою. Дерева поведінки в 3-5 разів ефективніші за FSM при масштабуванні.
// Unity: спрощений Sequence node
public class SequenceNode : BehaviourNode {
private List<BehaviourNode> children;
private int currentIndex = 0;
public override NodeStatus Tick(AIContext context) {
while (currentIndex < children.Count) {
var status = children[currentIndex].Tick(context);
if (status == NodeStatus.Running) return NodeStatus.Running;
if (status == NodeStatus.Failure) {
currentIndex = 0;
return NodeStatus.Failure;
}
currentIndex++;
}
currentIndex = 0;
return NodeStatus.Success;
}
}
Ми використовуємо паралельні таски для одночасних дій (стрільба + рух), пріоритетні селектори для термінових ситуацій (ухилення від гранати). Кожен тік оновлює чорну дошку (Blackboard) — спільне сховище даних між нодами. Це дозволяє гнучко керувати станом без глобальних змінних. Крім BT, ми іноді застосовуємо Utility AI для складних рішень з багатьма факторами.
Як AI бачить гравця: система сприйняття
Ключове питання — не «що робить противник», а «що він знає про світ». Без нормальної системи сприйняття BT-дерево працює з телепатією: ворог знає позицію гравця крізь стіни, реагує миттєво.
Field of View — конус видимості з кутом і дальністю:
bool CanSeePlayer(Transform enemy, Transform player, float viewAngle, float viewDistance) {
Vector3 dirToPlayer = (player.position - enemy.position).normalized;
if (Vector3.Angle(enemy.forward, dirToPlayer) > viewAngle / 2f)
return false;
float dist = Vector3.Distance(enemy.position, player.position);
if (dist > viewDistance) return false;
return !Physics.Raycast(enemy.position, dirToPlayer, dist,
LayerMask.GetMask("Obstacles"));
}
Hearing — звукові події через чергу: кроки, постріли, падіння предметів. Кожна подія має радіус і затухання. Memory — запам'ятовуємо останню відому позицію, патрулюємо її, якщо втратили ціль. Система сприйняття зменшує читерство AI в 4 рази порівняно з телепатією.
Як DDA покращує ігровий досвід?
Фіксована складність — погано. Dynamic Difficulty Adjustment адаптує поведінку під результати гравця. Параметри завантажуються з конфігу — дизайнер змінює без перекомпіляції.
| Параметр | Легкий | Середній | Складний |
|---|---|---|---|
| Реакція на гравця | 1.2 сек | 0.6 сек | 0.2 сек |
| Кут огляду | 60° | 90° | 120° |
| Точність стрільби | 40% | 70% | 90% |
| Час патрулювання | 8 сек | 5 сек | 3 сек |
DDA автоматично зсуває параметри на основі win rate гравця за останні N сесій. Це економить до 30% часу на ручному балансуванні та утримує гравця в потоці. У середньому проєкт заощаджує $2,000–5,000 на етапі балансування. Wikipedia: Dynamic game difficulty balancing
Чи впливає AI на продуктивність?
AI тіки не повинні виконуватися кожен кадр. Для 20 противників на сцені:
Оптимізації продуктивності
| Метод оптимізації | Ефект |
|---|---|
| BT Tick кожні 100–200ms | Зниження CPU на 40% |
| Raycast через LOD (далекі вороги рідше) | Економія 50% витрат на фізику |
| Pathfinding тільки при зміні цілі (A*) | Плавні 60 FPS на пристроях 5-річної давності |
Unity NavMesh на мобільних пристроях працює добре, але перерахунок шляху для всіх агентів в один фрейм дає спайк. Розподіляємо перерахунок через CoroutineManager або Job System. Гарантуємо стабільні 60 FPS на пристроях 5-річної давності.
Процес розробки AI противника
- Аналіз — вивчаємо ігрові механіки, дизайн-документ, сценарії поведінки.
- Проектування — обираємо архітектуру (FSM/BT/Utility AI), проектуємо систему сприйняття, пам'ять.
- Реалізація — пишемо код, інтегруємо з навігацією (NavMesh), налаштовуємо параметри.
- Тестування — плейтестинг: заміряємо death rate, time-to-kill, win rate по рівнях. Ітеруємо.
- Деплой — передаємо вихідний код з коментарями, діаграми BT, конфіги. Навчаємо команду.
Кожен етап документуємо. За запитом — інтеграція у ваш CI/CD пайплайн.
Що входить у розробку AI противника
В рамках проекту ви отримуєте:
- Вихідний код AI-системи на Unity C# або Godot GDScript з коментарями
- Документація з архітектури BT та системи сприйняття (діаграми, конфіги)
- Інтеграція з вашою навігацією (NavMesh) та анімаціями
- Налаштування параметрів DDA під ваш геймдизайн
- Завантажувані конфіги (JSON) для швидкої ітерації дизайнера
- Навчання команди (1-2 години) по використанню та розширенню AI
- Підтримка на етапі тестування та після релізу
Орієнтири по термінах та вартості
- Базовий FSM-противник з патрулюванням і переслідуванням — 3–5 днів, від $300.
- Повноцінна система з BT, сприйняттям, DDA та кількома типами — 3–6 тижнів, від $2500.
- Економія на ребалансуванні завдяки DDA — в середньому $3,000 на проєкт.
Точна вартість розраховується індивідуально після аналізу вашої гри.
Зв'яжіться з нами, щоб отримати консультацію з архітектури AI для вашого проекту. Ми допоможемо обрати оптимальний стек (Unity, Godot, Unreal) і уникнути типових помилок — читерства ІІ та спадів продуктивності.







