Прибуток:
- Здатність створювати надійний ігровий код зі штучним інтелектом, який можна компілювати, надаючи механізм, версію, мову та архітектурний контекст, а також інтегрувати його, читаючи та розуміючи код
- Можливість керувати продуктивністю ігрового коду (розподіл на кадр), життєвим циклом двигуна та ризиками галюцинацій шляхом компіляції, тестування та профілювання
- Здатність застосовувати принцип повноважень хоста в багатокористувацьких іграх і відповідально використовувати інформацію про безпеку лише для захисту та перевірки власної гри.
Гра програмна; Незалежно від того, наскільки добре він розроблений, він реалізований за допомогою коду. Ігровий движок — це інфраструктура, яка забезпечує роботу гри: 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. Виявляйте помилки життєвого циклу шляхом тестування.
Багатокористувацька безпека. Це найбільш критична проблема з точки зору ІТ/безпеки. Ніколи не довіряйте клієнту в багатокористувацькій грі: клієнтом на комп’ютері гравця можна маніпулювати для шахрайства. Перевірте критичний статус, такий як бали, пошкодження, гроші на сервері (авторитетний сервер). Контролюйте мережевий код, згенерований штучним інтелектом, за цим принципом; Якщо штучний інтелект створив уразливість, що викликає довіру клієнта, виправте її. Використовуйте цю інформацію лише для захисту та перевірки власної гри; Несанкціонований доступ до чужого сервера або його шахрайство є незаконними та неетичними.
Застереження: код, створений штучним інтелектом, може містити вразливості (відсутня перевірка введення, довіра клієнта, маніпуляції з файлом збереження). Не приймайте сліпо код; Виконайте перевірку безпеки, зокрема мережі, економіки та коду збереження.
Заборгованість за архітектуру та обслуговування
ШІ швидко виконує окремі функції; Але архітектура гри — як системи розділені, як вони спілкуються одна з одною, де зберігаються дані — це довгострокове рішення, і воно належить людині. Якщо ви скажете штучному інтелекту «написати весь інвентар, боротьбу та систему збереження разом», ви отримаєте робочий, але тісно пов’язаний, складний у обслуговуванні клубок, який не розширюється. Натомість ви розробляєте архітектуру, використовуєте штучний інтелект для заповнення невеликих компонентів визначеними інтерфейсами. Хороша архітектура впливає на розвиток гри: неправильні рішення повертаються через рік як технічний борг, який затримує кожну нову функцію.
Іншим джерелом заборгованості за технічне обслуговування є код, який входить у проект, не будучи зрозумілим. Система, написана ШІ, може працювати сьогодні; Але коли через півроку його потрібно замінити, і ніхто не пам’ятає, що вони зробили, борг перетворюється на відсотки. Ось чому важливі дві дисципліни: читання та розуміння коду під час виробництва та запит на уточнюючі коментарі від ШІ. Як правило, не вставляйте у свій проект жодного коду ШІ, який ви не можете переписати самостійно або принаймні пояснити рядок за рядком. AI дає швидкість; Ваша дисциплінованість забезпечує стійкість.
три міні-чохла
Випадок 1 — Контекст випуску запобіг помилці. Програміст спочатку сказав: «Напишіть інвентар для Unity»; код використовував старий API, він не компілювався. Потім він дав контекст «Unity 2022.3, C#, на основі ScriptableObject»; код, скомпільований вперше та відповідний проекту. Контекст заощадив годину налагодження.
Випадок 2 — пастка ефективності. В одній грі частота кадрів була низькою. Під час профілювання було помічено, що метод оновлення, створений штучним інтелектом, виділяє новий список у кожному кадрі та шукає ворогів. Виправлено код із кешованим посиланням і неквадратичним оновленням, збільшивши частоту кадрів з 42 до 60.
Випадок 3 — Виявлено вразливість системи безпеки. У багатокористувацькій грі код, згенерований штучним інтелектом, обчислював шкоду клієнту та повідомляв про це серверу; це було відкрито для шахрайства (клієнт міг завдати нескінченної шкоди). Код зроблено серверно-авторитарним (сервер розраховує збитки). Аудит запобіг скандалу з обманом після публікації.
Чотири шаблони, які можна копіювати
1) Запит коду з контекстом:
Двигун: Unity 2022.3. Мова: C#. Архітектура: [напр. на основі компонентів]. Обмеження: розподіл в оновленні; бути читабельним і коментованим. Завдання: [один, визначений компонент, напр. «контролер символів подвійного стрибка»]. Переконайтеся, що кожен API, який ви використовуєте, має цю версію; Якщо ви не впевнені, дайте мені знати.
2) Пояснення/огляд коду:
Поясніть наступний код рядок за рядком і напишіть (1) що він робить, (2) можливі проблеми з продуктивністю (розподіл кадрів, дорогий пошук), (3) можливі помилки, (4) пропозиції щодо покращення. Код: [вставити]
3) Аудит безпеки для кількох гравців:
Перегляньте наведений нижче код багатокористувацької гри на предмет безпеки. Зокрема: місця, де клієнт є довіреним, критичний стан, який потрібно перевірити на сервері (пошкодження, бали, гроші), відсутність перевірки введення. Запропонуйте виправлення, щоб зробити сервер авторитарним. Це лише для захисту моєї власної гри. Код: [вставити]
4) Рефактор, орієнтований на профіль продуктивності:
Цей код виконується на кожному кадрі та зменшує частоту кадрів: [код]. Знайти розподіл, дорогі пошуки та непотрібні операції кадр за кадром; Оптимізуйте без порушення поведінки за допомогою кешування та менш частих оновлень. Поясніть зміни.
Слабка підказка / Сильна підказка
Слабка підказка:
Напишіть систему збереження в Unity.
Немає версії, формату, обсягу даних, безпеки; Результат загальний і ризикований.
Потужна підказка:
Двигун: Unity 2022.3, C#. Завдання: система збереження/завантаження на основі JSON. Необхідно зберегти: місцезнаходження гравця, інвентар, прогрес. Обмеження: отримати керування помилками проти пошкодження файлів; Додайте перевірку цілісності (хеш) до файлу збереження, щоб запобігти шахрайству, легко змінивши його гравцем. Закоментуйте код і переконайтеся, що кожен API має цю версію.
Контроль версій, область дії, обробка помилок і перевірка цілісності посилюють результат.
Контекстна таблиця двигуна/мови
двигун
мова
Що ви повинні дати ШІ
особливу увагу
єдність
C#
Версія, система введення/фізики
Розподіл оновлення, життєвий цикл
нереальний
Blueprint
Версія, контекст вузла
Візуальні логічні межі
нереальний
C++
Версія, модульна структура
Пам'ять, GC, макроси
мультиплеер
обидва
модель мережі
Ведучий-авторитаризм
Поширені помилки
- Двигун/версія не вказується. Він походить із застарілого або створеного API.
- Довіряти коду, не розуміючи його. Накопичується непоганий борг.
- Не вимірювання ефективності. Покадрове розподілення тихо зменшує частоту кадрів.
- Довіра до клієнта. У багатокористувацькій грі існує вразливість до шахрайства.
- Бажання отримати всю систему одразу. Маленький шматочок, який можна перевірити, безпечніший.
Підсумовуючи
ШІ є потужним помічником у коді гри, але для цього потрібен движок, версія та архітектурний контекст. Не вставляйте його в проект, не прочитавши та не зрозумівши код, не скомпілювавши та не протестувавши його, а також не перевіривши продуктивність і безпеку. Підтримуйте авторитарність сервера в багатокористувацькій грі та використовуйте інформацію про безпеку лише для захисту та перевірки.
Аплікаційне завдання
Виберіть невеликий компонент (наприклад, подвійний стрибок або простий інвентар). Згенеруйте код, надавши механізм і версію з шаблоном «запит коду з контекстом». Потім усуньте ризики щодо продуктивності та помилок, перевіривши той самий код за допомогою шаблону «Опис коду/перегляд». Скомпілюйте та протестуйте код у двигуні.
контрольний список
- [ ] Я надав движок, версію, мову та контекст архітектури.
- [ ] Я прочитав і зрозумів код; Я хотів це з коментарем.
- [ ] Я зібрав і протестував його на двигуні та виміряв продуктивність.
- [ ] Я перевірив безпеку в коді мережі/економії/збереження.
- [ ] Я використовував інформацію безпеки лише для захисту своєї власної гри.