единици
1. Въведение в изкуствения интелект в разработването на игри: роли, граници, проверка, авторско право и етика 2. Прототип и механичен дизайн: Бърза итерация от идея до възпроизвеждано ядро 3. Системи за поведение и диалог на NPC: Изкуствен интелект, който оживява героя 4. Процедурно генериране на съдържание (PCG): ниво, карта, мисия и разказ 5. Активи и визуална продукция: концептуално изкуство, 2D/3D и текстура 6. Производство на звук, музика и ефекти: чутият свят на играта 7. Генериране на код и интеграция на двигателя: Unity (C#) и Unreal (Blueprint/C++) 8. Баланс на играта, симулация и икономия: Честна игра с числа 9. Осигуряване на качеството (QA), отстраняване на грешки и автоматизирано тестване 10. Авторско право, оригиналност, лиценз и етика: публикувано и отговорно съдържание 11. Работен процес от край до край, интеграция на производствена линия, управление и услуга на живо
единица 7 / 11

Генериране на код и интеграция на двигателя: Unity (C#) и Unreal (Blueprint/C++)

Печалби:

  • Възможност за създаване на надежден, компилируем код на игра от изкуствен интелект чрез предоставяне на двигател, версия, език и архитектурен контекст и интегрирането му чрез четене и разбиране на кода
  • Възможност за управление на специфична за кода на играта производителност (разпределение на кадър), жизнен цикъл на двигателя и рискове от халюцинации чрез компилиране, тестване и профилиране
  • Способност за прилагане на принципа на хост-авторитет в мултиплейър игри и отговорно използване на информацията за сигурност само за защита и проверка на собствената игра.

Играта е софтуерна; Без значение колко добре е проектиран, той се изпълнява с код. Игровият двигател е инфраструктурата, която кара играта да работи: Unity (широко използван двигател, скриптиран на C#) и Unreal Engine (двигател, използващ C++ и визуалния скриптов език Blueprint) са двата най-често срещани. AI е една от най-зрелите помощни средства в генерирането на код: контролер на играча, система за инвентаризация, държавни машини, запазване/зареждане, логика на интерфейса, отстраняване на грешки и рефакторинг (рефакторинг на код, без да се нарушава поведението му). Но кодът на играта има свои собствени капани: производителност (честота на кадрите), жизнен цикъл на двигателя, сигурност на мултиплейър. В този урок ще научите как да използвате AI безопасно и ефективно в кода на играта.

Критичен принцип: контекст на двигателя и версията

Ако AI не знае за коя машина и версия пише, той ще създаде объркан, остарял или несъществуващ API. Така че дайте контекст на двигателя, версията, езика и архитектурата във всеки подканващ код. „Писане на движение на играч за Unity“ е слабо; „Unity 2022.3, C#, нова система за въвеждане, базирано на твърдо тяло физическо движение“ е мощен. Посочете дали искате Blueprint или C++ в Unreal и коя версия използвате.

Сигурен кодов поток стъпка по стъпка:

  1. Дайте контекст (двигател, версия, език, текуща архитектура, ограничения).
  2. Искате го малко и дефинирано (единичен компонент, а не цялата система).
  3. Прочетете и разберете кода (разберете какво прави ред по ред; не поставяйте код, който не разбирате).
  4. Изградете и тествайте (работете на двигател; профил — измервайте производителността).
  5. Рефакторинг и интегриране (съвпадение на стандарта на проекта).
Съвет: Когато питате AI за код, кажете „обяснете с коментари“. Вашата цел е да разберете кода; Поставянето на AI код, който не разбирате, в проект ще натрупа неподдържан дълг. Също така поискайте код на малки, тествани парчета: Вместо система от 500 реда, компонент от 30-50 реда, който върши една дефинирана работа, е едновременно лесен за проверка и интегриране.

Капани, специфични за кода на играта

Изпълнение. Кодът на играта се изпълнява 30-60+ пъти в секунда. AI може да постави скъпи операции (разпределяне на памет, търсене, манипулиране на низове) в цикъла за актуализиране, който се изпълнява на всеки кадър; това намалява честотата на кадрите. Профилирайте критичните кодове за производителност и дайте ограничения на AI, като например „изпълни всеки кадър, без разпределение“.

Жизнен цикъл на двигателя. AI понякога обърква, когато се извикват специални методи, като Awake/Start/Update в Unity, BeginPlay/Tick в Unreal. Уловете грешки в жизнения цикъл чрез тестване.

Мултиплейър сигурност. Това е най-критичният проблем по отношение на ИТ/сигурността. Никога не се доверявайте на клиента в мултиплейър: клиентът на компютъра на играча може да бъде манипулиран за измама. Проверете критично състояние като точки, щети, пари на сървъра (сървър-авторитетен). Контролирайте мрежовия код, генериран от AI срещу този принцип; Ако изкуственият интелект е създал уязвимост, която се доверява на клиента, поправете я. Използвайте тази информация само за защита и проверка на вашата собствена игра; Неоторизиран достъп или измама на чужд сървър е незаконно и неетично.

Внимание: Кодът, генериран от изкуствен интелект, може да съдържа уязвимости (липсващо валидиране на въвеждане, доверие на клиента, манипулиране на файл за запазване). Не приемайте сляпо кода; Извършете преглед на сигурността, особено на мрежата, икономиката и кода за запазване.

Дълг за архитектура и поддръжка

AI произвежда индивидуални функции бързо; Но архитектурата на една игра – как са разделени системите, как си говорят помежду си, къде се съхраняват данните – е дългосрочно решение и то принадлежи на човека. Ако кажете на AI "да напише целия инвентар, битката и системата за спасяване заедно", получавате работещо, но тясно свързано, трудно за поддържане, неразширяемо кълбо прежда. Вместо това вие проектирате архитектурата, използвате AI за попълване на малки компоненти с дефинирани интерфейси. Добрата архитектура има значение, докато играта расте: лошите решения се връщат година по-късно като технически дълг, който забавя всяка нова функция.

Друг източник на дълг за поддръжка е кодът, който влиза в проекта, без да бъде разбран. Система, написана от AI, може да работи днес; Но когато трябва да го смените шест месеца по-късно и никой не помни какво е направил, дългът се превръща в лихва. Ето защо две дисциплини са от съществено значение: четене и разбиране на кода по време на производство и искане на поясняващи коментари от AI. Като основно правило, не поставяйте никакъв AI код в проекта си, който не можете да пренапишете сами или поне да обясните ред по ред. AI дава скорост; Вашата дисциплина дава устойчивост.

три мини калъфа

Случай 1 — Контекстът на издаване предотврати грешката. Един програмист първо каза: „Напишете опис за Unity“; кодът използваше стар API, не се компилира. След това даде контекста "Unity 2022.3, C#, базиран на ScriptableObject"; кодът е компилиран за първи път и отговаря на проекта. Контекстът спести един час отстраняване на грешки.

Случай 2 — Капан на ефективността. В една игра честотата на кадрите беше ниска. При профилирането се видя, че метод за актуализиране, произведен от AI, разпределя нов списък във всеки кадър и търси врагове. Коригирахме кода с кеширана справка и неквадратична актуализация, увеличавайки честотата на кадрите от 42 на 60.

Случай 3 — Улавяна уязвимост на сигурността. В мултиплейър игра кодът, генериран от AI, изчислява щетите на клиента и ги докладва на сървъра; това беше отворено за измама (клиентът можеше да нанесе безкрайни щети). Кодът е направен сървърно авторитарен (сървърът изчислява щетите). Одитът предотврати скандал с измама след публикуване.

Четири копируеми шаблона

1) Заявка за код с контекст:

Двигател: Unity 2022.3. Език: C#. Архитектура: [напр. базиран на компонент]. Ограничение: Разпределяне в актуализация; да бъдат четливи и коментирани. Задача: [единичен, дефиниран компонент, напр. "контролер за знаци с двоен скок"]. Проверете дали всеки API, който използвате, е в тази версия; Ако не сте сигурни, уведомете ме.

2) Обяснение/преглед на кода:

Обяснете следния код ред по ред и напишете (1) какво прави, (2) възможни проблеми с производителността (разпределение на рамка, скъпо търсене), (3) възможни грешки, (4) предложения за подобрение. Код: [поставяне]

3) Одит на сигурността на мултиплейър:

Разгледайте следния код за мултиплейър за сигурност. По-конкретно: места, където клиентът се доверява, критично състояние, което трябва да бъде потвърдено на сървъра (щети, точки, пари), липсваща проверка на входа. Предложете корекция, за да направя сървъра авторитарен. Това е само за защита на собствената ми игра. Код: [поставете]

4) Рефактор, фокусиран върху профила на ефективността:

Този код се изпълнява на всеки кадър и намалява честотата на кадрите: [код]. Намерете разпределения, скъпи търсения и ненужни операции кадър по кадър; Оптимизирайте без нарушаване на поведението с кеширане и по-редки актуализации. Обяснете промените.

Слаба подкана / Силна подкана

Слаба подкана:

Напишете система за запазване в Unity.

Няма версия, формат, обхват на данните, сигурност; Резултатът е общ и рискован.

Мощна подкана:

Двигател: Unity 2022.3, C#. Задача: JSON базирана система за запис/зареждане. За запазване: местоположение на играча, инвентар, напредък. Ограничение: получаване на управление на грешки срещу повреда на файлове; Добавете проверка на целостта (хеш) към файла за запазване, за да предотвратите измама, като го промените лесно от играча. Коментирайте кода и проверете дали всеки API е в тази версия.

Версиите, обхватът, обработката на грешки и проверката на целостта втвърдяват изхода.

Контекстна таблица на двигател/език

двигател

език

Какво трябва да дадете на AI

специално внимание

единство

C#

Версия, система за въвеждане/физика

Актуализиране на разпределението, жизнен цикъл

нереално

Чертеж

Версия, контекст на възел

Визуални логически граници

нереално

C++

Версия, модулна структура

Памет, GC, макроси

мултиплейър

и двете

мрежов модел

Водещ-авторитаризъм

Често срещани грешки

  • Не е посочен двигател/версия. Идва от остарял или измислен API.
  • Доверяване на код, без да го разбирате. Натрупва се непоносим дълг.
  • Не се измерва ефективността. Разпределението кадър по кадър тихо намалява честотата на кадрите.
  • Доверяване на клиента. Има уязвимост при измама в мултиплейър.
  • Искате цялата система наведнъж. Малко, подлежащо на тестване парче е по-безопасно.

В обобщение

AI е мощен помощник в кода на играта, но изисква двигател, версия и архитектурен контекст. Не го поставяйте в проект, без да сте прочели и разбрали кода, да сте го компилирали и тествали и да сте проверили производителността и сигурността. Поддържайте авторитаризъм на сървъра в мултиплейър и използвайте информацията за сигурност само за защитни цели и за проверка.

Задача за приложение

Изберете малък компонент (напр. двоен скок или обикновен инвентар). Генерирайте код, като предоставите двигател и версия с шаблона „заявка за код с контекст“. След това премахнете рисковете от производителност и грешки, като прегледате същия код с шаблона „Описание/преглед на кода“. Компилирайте и тествайте кода в двигателя.

контролен списък

  • [ ] Дадох контекста на двигателя, версията, езика и архитектурата.
  • [ ] Прочетох и разбрах кода; Исках го с коментар.
  • [ ] Компилирах и го тествах в двигателя и измерих производителността.
  • [ ] Направих проверка за сигурност в кода за мрежа/икономика/запазване.
  • [ ] Използвах само информация за сигурност, за да защитя собствената си игра.