Печалби:
- Възможност за създаване на надежден, компилируем код на игра от изкуствен интелект чрез предоставяне на двигател, версия, език и архитектурен контекст и интегрирането му чрез четене и разбиране на кода
- Възможност за управление на специфична за кода на играта производителност (разпределение на кадър), жизнен цикъл на двигателя и рискове от халюцинации чрез компилиране, тестване и профилиране
- Способност за прилагане на принципа на хост-авторитет в мултиплейър игри и отговорно използване на информацията за сигурност само за защита и проверка на собствената игра.
Играта е софтуерна; Без значение колко добре е проектиран, той се изпълнява с код. Игровият двигател е инфраструктурата, която кара играта да работи: Unity (широко използван двигател, скриптиран на C#) и Unreal Engine (двигател, използващ C++ и визуалния скриптов език Blueprint) са двата най-често срещани. AI е една от най-зрелите помощни средства в генерирането на код: контролер на играча, система за инвентаризация, държавни машини, запазване/зареждане, логика на интерфейса, отстраняване на грешки и рефакторинг (рефакторинг на код, без да се нарушава поведението му). Но кодът на играта има свои собствени капани: производителност (честота на кадрите), жизнен цикъл на двигателя, сигурност на мултиплейър. В този урок ще научите как да използвате AI безопасно и ефективно в кода на играта.
Критичен принцип: контекст на двигателя и версията
Ако AI не знае за коя машина и версия пише, той ще създаде объркан, остарял или несъществуващ API. Така че дайте контекст на двигателя, версията, езика и архитектурата във всеки подканващ код. „Писане на движение на играч за Unity“ е слабо; „Unity 2022.3, C#, нова система за въвеждане, базирано на твърдо тяло физическо движение“ е мощен. Посочете дали искате Blueprint или C++ в Unreal и коя версия използвате.
Сигурен кодов поток стъпка по стъпка:
- Дайте контекст (двигател, версия, език, текуща архитектура, ограничения).
- Искате го малко и дефинирано (единичен компонент, а не цялата система).
- Прочетете и разберете кода (разберете какво прави ред по ред; не поставяйте код, който не разбирате).
- Изградете и тествайте (работете на двигател; профил — измервайте производителността).
- Рефакторинг и интегриране (съвпадение на стандарта на проекта).
Съвет: Когато питате 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 е мощен помощник в кода на играта, но изисква двигател, версия и архитектурен контекст. Не го поставяйте в проект, без да сте прочели и разбрали кода, да сте го компилирали и тествали и да сте проверили производителността и сигурността. Поддържайте авторитаризъм на сървъра в мултиплейър и използвайте информацията за сигурност само за защитни цели и за проверка.
Задача за приложение
Изберете малък компонент (напр. двоен скок или обикновен инвентар). Генерирайте код, като предоставите двигател и версия с шаблона „заявка за код с контекст“. След това премахнете рисковете от производителност и грешки, като прегледате същия код с шаблона „Описание/преглед на кода“. Компилирайте и тествайте кода в двигателя.
контролен списък
- [ ] Дадох контекста на двигателя, версията, езика и архитектурата.
- [ ] Прочетох и разбрах кода; Исках го с коментар.
- [ ] Компилирах и го тествах в двигателя и измерих производителността.
- [ ] Направих проверка за сигурност в кода за мрежа/икономика/запазване.
- [ ] Използвах само информация за сигурност, за да защитя собствената си игра.