Прибыль:
- Способность создавать надежный, компилируемый игровой код на основе искусственного интеллекта, предоставляя движок, версию, язык и архитектурный контекст, и интегрировать его путем чтения и понимания кода.
- Возможность управлять производительностью игрового кода (распределение на кадр), жизненным циклом движка и рисками галлюцинаций посредством компиляции, тестирования и профилирования.
- Способность применять принцип авторитета хоста в многопользовательских играх и ответственно использовать информацию безопасности только для защиты и проверки собственной игры.
Игра программная; Независимо от того, насколько хорошо он спроектирован, он реализуется с помощью кода. Игровой движок — это инфраструктура, обеспечивающая запуск игры: Unity (широко используемый движок, написанный на C#) и Unreal Engine (движок, использующий C++ и язык визуальных сценариев Blueprint) являются двумя наиболее распространенными. ИИ — одно из наиболее зрелых средств генерации кода: контроллер игрока, система инвентаря, конечные автоматы, сохранение/загрузка, логика интерфейса, отладка и рефакторинг (рефакторинг кода без нарушения его поведения). Но в игровом коде есть свои подводные камни: производительность (частота кадров), жизненный цикл движка, многопользовательская безопасность. В этом модуле вы узнаете, как безопасно и эффективно использовать ИИ в игровом коде.
Критический принцип: контекст движка и версии
Если ИИ не знает, для какого движка и версии он пишет, он создаст запутанный, устаревший или несуществующий API. Поэтому указывайте контекст двигателя, версии, языка и архитектуры в каждой подсказке кода. «Написание движений игрока для Unity» работает слабо; «Unity 2022.3, C#, новая система ввода, физическое движение на основе Rigidbody» — это мощно. Укажите, хотите ли вы использовать Blueprint или C++ в Unreal, и какую версию вы используете.
Безопасный поток кода шаг за шагом:
- Укажите контекст (движок, версия, язык, текущая архитектура, ограничения).
- Хотите, чтобы оно было небольшим и определенным (отдельный компонент, а не вся система).
- Прочтите и поймите код (понимайте, что он делает, построчно; не добавляйте код, который вы не понимаете).
- Сборка и тестирование (запуск на движке; профиль — измерение производительности).
- Рефакторинг и интеграция (соответствие стандарту проекта).
Совет: запрашивая у ИИ код, скажите «объясните с комментариями». Ваша цель — понять код; Внедрение в проект кода ИИ, который вы не понимаете, приведет к накоплению необслуживаемого долга. Также просите код небольшими тестируемыми фрагментами: вместо системы из 500 строк можно легко проверить и интегрировать компонент из 30–50 строк, выполняющий одну определенную работу.
Ловушки, специфичные для кода игры
Производительность. Код игры выполняется 30–60+ раз в секунду. ИИ может помещать дорогостоящие операции (выделение памяти, поиск, манипулирование строками) в цикл обновления, который выполняется в каждом кадре; это снижает частоту кадров. Профилируйте критичные к производительности коды и устанавливайте ограничения ИИ, такие как «запускать каждый кадр, без выделения».
Жизненный цикл двигателя. ИИ иногда сбивает с толку при вызове специальных методов, таких как Awake/Start/Update в Unity, BeginPlay/Tick в Unreal. Выявляйте ошибки жизненного цикла путем тестирования.
Многопользовательская безопасность. Это наиболее критичная проблема с точки зрения ИТ/безопасности. Никогда не доверяйте клиенту в мультиплеере: клиентом на компьютере игрока могут манипулировать с целью мошенничества. Проверьте критический статус, такой как очки, урон, деньги на сервере (авторитетный сервер). Контролируйте сетевой код, генерируемый ИИ, в соответствии с этим принципом; Если ИИ создал уязвимость, вызывающую доверие клиентов, исправьте ее. Используйте эту информацию только для защиты и проверки своей игры; Несанкционированный доступ к чужому серверу или мошенничество на нем являются незаконными и неэтичными.
Внимание: код, сгенерированный ИИ, может содержать уязвимости (отсутствует проверка ввода, доверие клиента, манипуляции с файлами сохранения). Не принимайте слепо код; Выполните проверку безопасности, особенно сети, экономики и сохраните код.
Архитектурный и эксплуатационный долг
ИИ быстро выполняет отдельные функции; Но архитектура игры — то, как системы делятся, как они общаются друг с другом, где хранятся данные — это долгосрочное решение, и оно принадлежит человеку. Если вы скажете ИИ «написать всю систему инвентаря, боя и сохранения вместе», вы получите работающий, но тесно связанный, трудно поддерживаемый и нерасширяемый клубок пряжи. Вместо этого вы проектируете архитектуру и используете ИИ для заполнения небольших компонентов с определенными интерфейсами. Хорошая архитектура имеет значение по мере роста игры: плохие решения возвращаются через год в виде технического долга, который задерживает каждую новую функцию.
Еще одним источником задолженности по обслуживанию является код, который входит в проект, будучи непонятым. Система, написанная ИИ, могла бы работать сегодня; Но когда через полгода приходится его менять и никто не помнит, что делали, долг превращается в проценты. Вот почему необходимы две дисциплины: чтение и понимание кода во время производства и запрос уточняющих комментариев от ИИ. Как правило, не добавляйте в свой проект код ИИ, который вы не сможете переписать самостоятельно или хотя бы объяснить построчно. ИИ дает скорость; Ваша дисциплина дает устойчивость.
три мини-кейса
Случай 1. Контекст выпуска предотвратил ошибку. Программист сначала сказал: «Напишите инвентарь для Unity»; код использовал старый API, он не компилировался. Затем он дал контекст «Unity 2022.3, C# на основе ScriptableObject»; код скомпилировался с первого раза и соответствовал проекту. Контекст сэкономил час отладки.
Случай 2. Ловушка производительности. В одной игре частота кадров была низкой. При профилировании было видно, что метод Update, созданный ИИ, выделял новый список в каждом кадре и искал врагов. Исправлен код с кэшированной ссылкой и неквадратичным обновлением, увеличивающий частоту кадров с 42 до 60.
Случай 3. Обнаружена уязвимость безопасности. В многопользовательской игре код, сгенерированный ИИ, подсчитал ущерб, нанесенный клиенту, и сообщил об этом серверу; это было открыто для мошенничества (клиент мог нанести бесконечный урон). Код сделан серверно-авторитарным (сервер подсчитывает ущерб). Проверка предотвратила скандал с мошенничеством после публикации.
Четыре копируемых шаблона
1) Запрос кода с контекстом:
Движок: Юнити 2022.3. Язык: С#. Архитектура: [например. на основе компонентов]. Ограничение: выделение при обновлении; быть читаемым и комментируемым. Задача: [один определенный компонент, например. «контроллер персонажа с двойным прыжком»]. Убедитесь, что каждый используемый вами API находится в этой версии; Если вы не уверены, дайте мне знать.
2) Объяснение/обзор кода:
Объясните следующий код построчно и напишите (1) что он делает, (2) возможные проблемы с производительностью (распределение на кадр, дорогой поиск), (3) возможные ошибки, (4) предложения по улучшению. Код: [вставить]
3) Аудит безопасности многопользовательской игры:
Проверьте следующий многопользовательский код на предмет безопасности. Конкретно: места, где клиенту доверяют, критическое состояние, которое необходимо проверить на сервере (урон, очки, деньги), отсутствие проверки ввода. Предложите исправление, чтобы сделать сервер авторитарным. Это просто защита моей игры. Код: [вставить]
4) Рефакторинг, ориентированный на профиль производительности:
Этот код выполняется для каждого кадра и снижает частоту кадров: [код]. Поиск выделений, дорогостоящих поисков и ненужных покадровых операций; Оптимизируйте, не нарушая поведение, за счет кэширования и менее частых обновлений. Объясните изменения.
Слабая подсказка / Сильная подсказка
Слабая подсказка:
Напишите систему сохранения в Unity.
Нет версии, формата, объема данных, безопасности; Результат общий и рискованный.
Мощная подсказка:
Движок: Unity 2022.3, C#. Задача: система сохранения/загрузки на основе JSON. Сохраняются: местоположение игрока, инвентарь, прогресс. Ограничение: получите управление ошибками против повреждения файлов; Добавьте проверку целостности (хеш) в файл сохранения, чтобы предотвратить мошенничество и легко изменить его игроком. Закомментируйте код и убедитесь, что каждый API находится в этой версии.
Управление версиями, область действия, обработка ошибок и проверка целостности повышают надежность выходных данных.
Таблица контекста механизма/языка
двигатель
язык
Что вы должны дать ИИ
особое внимание
единство
С#
Версия, Система ввода/физики
Распределение обновлений, жизненный цикл
нереальный
План
Версия, контекст узла
Ограничения визуальной логики
нереальный
С++
Версия, структура модуля
Память, сборщик мусора, макросы
мультиплеер
оба
сетевая модель
Ведущий-авторитаризм
Распространенные ошибки
- Не указан двигатель/версия. Это происходит из-за устаревшего или выдуманного API.
- Доверять коду, не понимая его. Накапливается невыполнимый долг.
- Не измерять производительность. Покадровое распределение незаметно снижает частоту кадров.
- Доверие клиенту. В мультиплеере есть уязвимость к мошенничеству.
- Хочет всю систему сразу. Небольшая, проверяемая деталь безопаснее.
В заключение
ИИ — мощный помощник в игровом коде, но для него требуется движок, версия и архитектурный контекст. Не добавляйте его в проект, не прочитав и не разобравшись в коде, не скомпилировав и не протестировав его, а также не проверив производительность и безопасность. Поддерживайте авторитаризм сервера в многопользовательской игре и используйте информацию безопасности только в целях защиты и проверки.
Задача приложения
Выберите небольшой компонент (например, двойной прыжок или простой инвентарь). Сгенерируйте код, предоставив механизм и версию с помощью шаблона «запрос кода с контекстом». Затем устраните риски производительности и ошибок, проверив тот же код с помощью шаблона «Описание/проверка кода». Скомпилируйте и протестируйте код в движке.
контрольный список
- [ ] Я указал движок, версию, язык и архитектуру.
- [ ] Я прочитал и понял код; Я хотел это с комментариями.
- [ ] Я скомпилировал и протестировал его в движке и измерил производительность.
- [ ] Я выполнил проверку безопасности в коде сети/экономики/сохранения.
- [ ] Я использовал информацию безопасности только для защиты своей игры.