ChatGPT и Dota 2: спавн крипов в Unity

Эксперимент по созданию игровой механики, аналогичной Dota 2, с использованием только ChatGPT, показал невозможность реализации даже простой системы спавна крипов без существенных исправлений сгенерированного кода.

Механика спавна крипов

Первый запрос в ChatGPT звучал: «Создать механику спавна крипов, как в Dota 2, для Unity».

ChatGPT предложил следующие шаги:

  1. Подготовка пути: Настройка путей движения крипов с помощью waypoints. Замечание: в Dota 2 waypoints — лишь часть системы навигации, необходим алгоритм поиска пути для обхода препятствий. Линейная интерполяция недостаточна.
  2. Префаб крипа: Создание префаба крипа с компонентами (Animator, Rigidbody и др.). Структура префаба сложная, но этот вопрос отложен.
  3. Скрипт движения крипа: Скрипт на C# для перемещения крипа между waypoints. Уточнение: сравнение позиций с плавающей точкой требует порогового значения расстояния, а не прямого сравнения.
  4. Менеджер спавна: Менеджер для генерации крипов через заданные интервалы времени. Ошибка: InvokeRepeating в Unity нестабилен. Рекомендуется использовать кастомные решения или более сложные таймеры. Сгенерированный скрипт Spawner содержит стилистические ошибки и ошибку в передаче метода SpawnCreep (передача строки вместо nameof).
  5. Настройка геймплея: Настройка поведения крипов (агрессия, выбор цели, здоровье). ChatGPT не предоставил код.
  6. Оптимизация: Рекомендации по оптимизации (объединение мешей, упрощение коллайдеров, использование LOD). Оптимизация анимации критически важна для больших групп крипов. Предложено использование запеченных анимаций.

Недостатки базового подхода

Результат работы ChatGPT — примитивная симуляция, не учитывающая систему поиска пути, коллизии, сложные поведенческие модели и оптимизацию.

Улучшение механики

Следующий запрос включал разделение крипов на команды, использование конечных автоматов или деревьев поведения, а также настройку параметров через Scriptable Objects с применением паттерна Composition Root.

ChatGPT создал Scriptable Object для параметров крипа, перечисление для команд и компонент Creep с использованием CreepStats. Однако многие аспекты остались нереализованными, а стиль кода и аннотации — несовершенными. Паттерн Composition Root применён частично.

Для обнаружения врагов и атак предлагалось использовать коллайдеры или систему обнаружения по расстоянию. Отмечено, что сфер кастинга предпочтительнее лучевого кастинга (raycasting).

Проблемы с кодом

Сгенерированный код содержит следующие проблемы:

  • Нарушение принципов SOLID.
  • Неэффективное использование таймеров.
  • Неправильная работа с плавающей точкой.
  • Отсутствие учёта скорости атаки.
  • Некорректное уничтожение объектов.
  • Отсутствие надёжной связи между компонентами.

Попытки исправить код и уточнить запросы привели к новым ошибкам и несогласованностям. ChatGPT не смог объединить сгенерированные фрагменты в работающую систему.

Эксперимент показал, что ChatGPT не может самостоятельно создать даже простую игровую механику уровня Dota 2. Нейросеть генерирует фрагменты кода, требующие значительной доработки. ChatGPT может быть полезен как вспомогательный инструмент для генерации отдельных фрагментов или поиска информации, но не заменит полноценного программиста при разработке сложной игры. Он может помочь вспомнить забытые детали или найти подходящие алгоритмы, но не способен создать целостную систему.

Что будем искать? Например,программа