Јединице
1. Увод у вештачку интелигенцију у развоју игара: улоге, границе, верификација, ауторска права и етика 2. Прототип и механички дизајн: брза итерација од идеје до језгра за игру 3. НПЦ понашање и системи дијалога: вештачка интелигенција која оживљава лик 4. Процедурално генерисање садржаја (ПЦГ): ниво, мапа, потрага и наратив 5. Средства и визуелна продукција: концепт уметности, 2Д/3Д и текстура 6. Продукција звука, музике и ефеката: Чувени свет игре 7. Генерисање кода и интеграција мотора: Унити (Ц#) и Унреал (Блуепринт/Ц++) 8. Баланс игре, симулација и економија: поштена игра са бројевима 9. Осигурање квалитета (КА), отклањање грешака и аутоматизовано тестирање 10. Ауторска права, оригиналност, лиценца и етика: садржај који се може објавити и одговоран 11. Скроз радни ток, интеграција производне линије, управљање и услуга уживо
Јединица 7 / 11

Генерисање кода и интеграција мотора: Унити (Ц#) и Унреал (Блуепринт/Ц++)

Добици:

  • Способност да се произведе поуздан, компилибилан код игре од вештачке интелигенције дајући мотор, верзију, језик и архитектонски контекст и интегрише га читањем и разумевањем кода
  • Способност управљања специфичним перформансама кода игре (додељивање по кадру), животним циклусом мотора и ризицима од халуцинација путем компилације, тестирања и профилисања
  • Способност примене принципа ауторитета домаћина у играма за више играча и одговорног коришћења безбедносних информација само за одбрану и верификацију сопствене игре.

Игра је софтверска; Без обзира колико је добро дизајниран, имплементиран је кодом. Мотор игре је инфраструктура која покреће игру: Унити (машинац који се широко користи написан у Ц#) и Унреал Енгине (машинац који користи Ц++ и визуелни скриптни језик Блуепринт) су два најчешћа. АИ је једно од најзрелијих помагала у генерисању кода: контролер играча, систем инвентара, државне машине, чување/учитавање, логика интерфејса, отклањање грешака и рефакторисање (рефакторисање кода без нарушавања његовог понашања). Али код игре има своје замке: перформансе (брзина кадрова), животни циклус мотора, сигурност за више играча. У овој јединици ћете научити како да безбедно и ефикасно користите АИ у коду игре.

Критички принцип: контекст мотора и верзије

Ако АИ не зна за који мотор и верзију пише, произвешће збуњен, застарео или непостојећи АПИ. Дакле, дајте контекст мотора, верзије, језика и архитектуре у сваком промпту кода. „Пишите покрет играча за Унити“ је слаб; „Унити 2022.3, Ц#, нови систем уноса, покрет физике заснован на крутом телу“ је моћан. Наведите да ли желите Блуепринт или Ц++ у Унреалу и коју верзију користите.

Безбедан ток кода корак по корак:

  1. Дајте контекст (машина, верзија, језик, тренутна архитектура, ограничења).
  2. Желите да буде мали и дефинисан (једна компонента, а не цео систем).
  3. Прочитајте и разумејте код (разумите шта ради ред по ред; не стављајте код који не разумете).
  4. Направи и тестирај (покрени на мотору; профил — мери перформансе).
  5. Рефакторисати и интегрисати (подударати стандард пројекта).
Савет: Када од АИ тражите код, реците „објасни са коментарима“. Ваш циљ је да разумете код; Стављање АИ кода који не разумете у пројекат ће акумулирати неодржив дуг. Такође затражите код у малим, проверљивим деловима: уместо система од 500 редова, компонента од 30-50 линија која ради један дефинисани посао је лако верификована и интегрисати.

Замке специфичне за код игре

Перформансе. Код игре се покреће 30-60+ пута у секунди. АИ може ставити скупе операције (додељивање меморије, тражење, манипулација стринговима) у петљу ажурирања која се покреће на сваком кадру; ово смањује брзину кадрова. Профилирајте критичне кодове за перформансе и дајте АИ ограничења као што је „покрени на сваком кадру, без алокације“.

Животни циклус мотора. АИ понекад збуњује када се позову посебне методе, као што су Аваке/Старт/Упдате у Унити-у, БегинПлаи/Тицк у Унреал-у. Ухватите грешке у животном циклусу тестирањем.

Сигурност за више играча. Ово је најкритичније питање у погледу ИТ/безбедности. Никада не верујте клијенту у игри за више играча: клијентом на рачунару играча може се манипулисати због варања. Проверите критични статус као што су поени, штета, новац на серверу (сервер-ауторитативно). Контролишите мрежни код који генерише АИ против овог принципа; Ако је вештачка интелигенција створила рањивост у којој клијенти верују, поправите је. Користите ове информације само за одбрану и верификацију сопствене игре; Неовлашћени приступ или варање на туђем серверу је незаконит и неетички.

Опрез: Код генерисан од вештачке интелигенције може да садржи рањивости (недостаје валидација уноса, поверење клијента, манипулација датотекама за чување). Не прихватајте слепо код; Извршите безбедносни преглед, посебно мреже, економије и кода за чување.

Дуг архитектонског и одржавања

АИ брзо производи појединачне функције; Али архитектура игре – како су системи подељени, како разговарају једни са другима, где се чувају подаци – је дугорочна одлука и припада човеку. Ако кажете вештачкој интелигенцији да „заједно напише цео инвентар, борбу и систем за спасавање“, добићете функционалну, али чврсто спојену, тешко одржавану, непрошириву клупу предива. Уместо тога, ви дизајнирате архитектуру, користите АИ за попуњавање малих компоненти дефинисаним интерфејсима. Добра архитектура чини разлику како игра расте: лоше одлуке се враћају годину дана касније као технички дуг који одлаже сваку нову функцију.

Други извор дуга за одржавање је код који улази у пројекат без разумевања. Систем који је написао АИ могао би да функционише данас; Али када шест месеци касније морате да га замените и нико се не сети шта је урадио, дуг се претвара у камату. Зато су две дисциплине неопходне: читање и разумевање кода у време производње и тражење појашњених коментара од вештачке интелигенције. Као правило, немојте стављати никакав АИ код у свој пројекат који не можете сами да препишете или бар објасните ред по ред. АИ даје брзину; Ваша дисциплина даје одрживост.

три мини кофера

Случај 1 — Контекст издања је спречио грешку. Програмер је прво рекао: „Напиши инвентар за Унити“; код је користио стари АПИ, није се компајлирао. Затим је дао контекст „Унити 2022.3, Ц#, заснован на СцриптаблеОбјецт“; код компајлиран први пут и одговара пројекту. Контекст је уштедео сат времена отклањања грешака.

Случај 2 — Замка перформанси. У једној игрици број кадрова је био низак. Приликом профилисања, видело се да је метода ажурирања коју је произвела АИ доделила нову листу у сваком оквиру и тражила непријатеље. Поправљен код са кешираном референцом и неквадратичним ажурирањем, повећавајући брзину кадрова са 42 на 60.

Случај 3 — Ухваћена је безбедносна рањивост. У игри за више играча, код генерисан АИ је израчунао штету на клијенту и пријавио је серверу; ово је било отворено за варање (клијент је могао да нанесе бесконачну штету). Код је направљен серверско ауторитарно (сервер израчунава штету). Ревизија је спречила скандал превара након објављивања.

Четири шаблона за копирање

1) Захтев за кодирање са контекстом:

Мотор: Унити 2022.3. Језик: Ц#. Архитектура: [нпр. на основу компоненти].Ограничење: Додељивање у ажурирању; бити читљив и коментарисан.Задатак: [једна, дефинисана компонента, нпр. „контролор карактера двоструког скока“]. Проверите да ли је сваки АПИ који користите у овој верзији; Ако нисте сигурни, јавите ми.

2) Објашњење/преглед кода:

Објасните следећи код ред по ред и напишите (1) шта ради, (2) могуће проблеме са перформансама (додела по кадру, скупа претрага), (3) могуће грешке, (4) предлоге за побољшање. Код: [налепи]

3) Ревизија безбедности за више играча:

Испитајте следећи код за више играча ради безбедности. Конкретно: места где се клијенту верује, критично стање које треба проверити на серверу (оштећење, поени, новац), недостајућа валидација уноса. Предложите поправку да сервер буде ауторитаран. Ово је само да одбраним своју игру. Шифра: [налепи]

4) Рефактор фокусиран на профил учинка:

Овај код се покреће на сваком кадру и смањује брзину кадрова: [код]. Пронађите алокације, скупе претраге и непотребне операције оквир по кадар; Оптимизујте без нарушавања понашања помоћу кеширања и ређих ажурирања. Објасните промене.

Слаби промпт / Јаки промпт

Слабо обавештење:

Напишите систем чувања у Унити.

Без верзије, формата, обима података, безбедности; Резултат је општи и ризичан.

Снажан упит:

Мотор: Унити 2022.3, Ц#. Задатак: ЈСОН базиран систем чувања/учитавања. Да се ​​сачува: локација играча, инвентар, напредак. Ограничење: добити управљање грешкама против оштећења датотеке; Додајте проверу интегритета (хеш) у датотеку за чување да бисте спречили варање тако што ћете је лако променити од стране плејера. Прокоментаришите код и проверите да ли је сваки АПИ на овој верзији.

Верзија, обим, руковање грешкама и провера интегритета појачавају излаз.

Табела контекста мотора/језика

мотор

језик

Шта морате дати АИ

посебну пажњу

јединство

Ц#

Верзија, улазни/физички систем

Алокација ажурирања, животни циклус

нестварно

Нацрт

Верзија, контекст чвора

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

нестварно

Ц++

Верзија, структура модула

Меморија, ГЦ, макрои

мултиплаиер

обоје

мрежни модел

Презентер-ауторитаризам

Уобичајене грешке

  • Без навођења мотора/верзије. Долази из застарелог или измишљеног АПИ-ја.
  • Веровати коду без разумевања. Неодрживи дуг се акумулира.
  • Не мерење перформанси. Додељивање оквира по кадар тихо смањује брзину кадрова.
  • Поверење клијенту. Постоји рањивост варања у мултиплаиеру.
  • Желећи цео систем одједном. Мали комад који се може тестирати је сигурнији.

Укратко

АИ је моћан помоћник у коду игре, али захтева мотор, верзију и архитектонски контекст. Немојте га стављати у пројекат без читања и разумевања кода, компајлирања и тестирања и провере перформанси и безбедности. Одржавајте ауторитарност сервера у игри за више играча и користите безбедносне информације само у одбрамбене и верификационе сврхе.

Задатак апликације

Изаберите малу компоненту (нпр. дупли скок или једноставан инвентар). Генеришите код тако што ћете обезбедити машину и верзију са шаблоном „захтев кода са контекстом“. Затим уклоните ризике перформанси и грешака тако што ћете исти код прегледати помоћу шаблона „Опис/преглед кода“. Саставите и тестирајте код у машини.

контролна листа

  • [ ] Дао сам контекст мотора, верзију, језик и архитектуру.
  • [ ] Прочитао сам и разумео код; Хтео сам то уз коментар.
  • [ ] Саставио сам га и тестирао у мотору и измерио перформансе.
  • [ ] Урадио сам безбедносну проверу у коду за мрежу/економију/сачувај.
  • [ ] Користио сам само безбедносне информације за одбрану сопствене игре.