Jednotka 7 / 11

Generovanie kódu a integrácia motora: Unity (C#) a Unreal (Blueprint/C++)

zisky:

  • Schopnosť vytvárať spoľahlivý, kompilovateľný herný kód z umelej inteligencie poskytnutím enginu, verzie, jazyka a architektonického kontextu a integrovať ho čítaním a porozumením kódu
  • Schopnosť riadiť výkon špecifický pre herný kód (pridelenie na snímku), životný cyklus motora a riziká halucinácií prostredníctvom kompilácie, testovania a profilovania
  • Schopnosť aplikovať princíp hostiteľ-autorita v multiplayerových hrách a používať bezpečnostné informácie zodpovedne len na obranu a overenie vlastnej hry.

Hra je softvérová; Bez ohľadu na to, ako dobre je navrhnutý, je implementovaný pomocou kódu. Herný engine je infraštruktúra, vďaka ktorej hra beží: Unity (široko používaný engine napísaný v C#) a Unreal Engine (engin využívajúci C++ a vizuálny skriptovací jazyk Blueprint) sú dva najbežnejšie. Umelá inteligencia je jednou z najvyspelejších pomôcok pri generovaní kódu: ovládač hráča, systém inventára, stavové automaty, ukladanie/načítanie, logika rozhrania, ladenie a refaktorovanie (refaktorovanie kódu bez narušenia jeho správania). Ale kód hry má svoje vlastné úskalia: výkon (snímková frekvencia), životný cyklus motora, bezpečnosť pre viacerých hráčov. V tejto lekcii sa naučíte, ako bezpečne a efektívne používať AI v kóde hry.

Kritický princíp: kontext motora a verzie

Ak AI nevie, pre ktorý engine a verziu píše, vytvorí zmätené, zastarané alebo neexistujúce API. V každej výzve na kód teda uveďte kontext motora, verzie, jazyka a architektúry. "Napíšte pohyb hráča pre Unity" je slabý; „Unity 2022.3, C#, nový vstupný systém, fyzikálny pohyb založený na pevných telesách“ je výkonný. Zadajte, či chcete v Unreale Blueprint alebo C++ a akú verziu používate.

Zabezpečený tok kódu krok za krokom:

  1. Uveďte kontext (motor, verzia, jazyk, aktuálna architektúra, obmedzenia).
  2. Chcete, aby bol malý a definovaný (jeden komponent, nie celý systém).
  3. Prečítajte si a pochopte kód (pochopte, čo robí riadok po riadku; nevkladajte kód, ktorému nerozumiete).
  4. Zostavte a otestujte (beh na motore; profil – meranie výkonu).
  5. Refaktorujte a integrujte (zodpovedajte štandardu projektu).
Tip: Keď požiadate AI o kód, povedzte „vysvetliť s komentármi“. Vaším cieľom je porozumieť kódu; Vložením kódu AI, ktorému nerozumiete do projektu, sa nahromadí neudržateľný dlh. Požiadajte tiež o kód v malých, testovateľných kúskoch: Namiesto 500-riadkového systému je ľahké overiť a integrovať 30-50 riadkový komponent, ktorý vykonáva jednu definovanú úlohu.

Pasce špecifické pre kód hry

Výkon. Herný kód beží 30-60+ krát za sekundu. Umelá inteligencia môže vložiť drahé operácie (pridelenie pamäte, vyhľadávanie, manipulácia s reťazcami) do aktualizačnej slučky, ktorá prebieha v každom rámci; tým sa zníži snímková frekvencia. Profilujte kódy kritické pre výkon a dávajte obmedzenia AI, ako napríklad „bežať na každom rámci, bez prideľovania“.

Životný cyklus motora. AI niekedy mätie, keď sa volajú špeciálne metódy, ako napríklad Awake/Start/Update v Unity, BeginPlay/Tick v Unreal. Zachyťte chyby životného cyklu testovaním.

Zabezpečenie pre viacerých hráčov. Toto je najkritickejší problém z hľadiska IT/bezpečnosti. Nikdy neverte klientovi v hre pre viacerých hráčov: klient na hráčovom počítači môže byť manipulovaný kvôli podvádzaniu. Overte kritický stav, ako sú body, poškodenie, peniaze na serveri (autoritatívny server). Ovládajte sieťový kód generovaný AI proti tomuto princípu; Ak AI vytvorila zraniteľnosť, ktorá dôveruje klientovi, opravte ju. Tieto informácie používajte iba na obranu a overenie vlastnej hry; Neoprávnený prístup alebo podvádzanie na serveri niekoho iného je nezákonné a neetické.

Upozornenie: Kód vygenerovaný AI môže obsahovať slabé miesta (chýbajúce overenie vstupu, dôvera klienta, manipulácia so súborom). Neprijímajte slepo kód; Vykonajte kontrolu zabezpečenia, najmä siete, ekonomiky a uloženia kódu.

Architektonický dlh a dlh na údržbu

AI rýchlo vytvára jednotlivé funkcie; Ale architektúra hry – ako sú systémy rozdelené, ako medzi sebou hovoria, kde sa uchovávajú dáta – je dlhodobým rozhodnutím a patrí k človeku. Ak poviete AI, aby „napísala celý inventár, bojový a záchranný systém spoločne“, získate funkčné, ale pevne spojené, ťažko udržiavateľné a nerozšíriteľné klbko. Namiesto toho navrhnete architektúru a použijete AI na naplnenie malých komponentov s definovanými rozhraniami. Dobrá architektúra robí rozdiel, keď hra rastie: zlé rozhodnutia sa vrátia o rok neskôr ako technický dlh, ktorý oneskoruje každú novú funkciu.

Ďalším zdrojom dlhu na výživnom je kód, ktorý vstupuje do projektu bez toho, aby bol pochopený. Systém napísaný AI by dnes mohol fungovať; Ale keď ho musíte vymeniť o šesť mesiacov neskôr a nikto si nepamätá, čo urobil, dlh sa zmení na úrok. Preto sú nevyhnutné dve disciplíny: čítanie a pochopenie kódu v čase výroby a vyžiadanie si objasňujúcich komentárov od AI. Pravidlom je, že do svojho projektu nevkladajte žiadny kód AI, ktorý nemôžete sami prepísať alebo aspoň vysvetliť riadok po riadku. AI dáva rýchlosť; Vaša disciplína dáva udržateľnosť.

tri mini prípady

Prípad 1 – Kontext vydania zabránil chybe. Programátor najprv povedal: "Napíšte inventár pre Unity"; kód používal staré API, neskompiloval sa. Potom dal kontext „Unity 2022.3, C#, založený na ScriptableObject“; kód bol zostavený prvýkrát a zapadol do projektu. Kontext ušetril hodinu ladenia.

Prípad 2 – Výkonová pasca. V jednej hre bola snímková frekvencia nízka. Pri profilovaní sa ukázalo, že metóda aktualizácie vytvorená AI ​​pridelila nový zoznam v každom rámci a hľadala nepriateľov. Opravený kód s odkazom vo vyrovnávacej pamäti a nekvadratickou aktualizáciou, čím sa obnovovacia frekvencia zvýšila zo 42 na 60.

Prípad 3 – Zachytená bezpečnostná chyba. V hre pre viacerých hráčov kód vygenerovaný AI vypočítal škodu na klientovi a nahlásil ju serveru; toto bolo otvorené pre podvádzanie (klient by mohol spôsobiť nekonečné škody). Kód sa stal autoritatívnym pre server (server vypočíta škody). Audit zabránil škandálom s podvádzaním po zverejnení.

Štyri kopírovateľné šablóny

1) Žiadosť o kód s kontextom:

Motor: Unity 2022.3. Jazyk: C#. Architektúra: [napr. na základe komponentov]. Obmedzenie: Prideľovanie v aktualizácii; byť čitateľný a komentovaný.Úloha: [jediná, definovaná zložka, napr. "ovládač dvojitého skoku"]. Overte, že každé rozhranie API, ktoré používate, je v tejto verzii; Ak si nie ste istý, dajte mi vedieť.

2) Vysvetlenie/kontrola kódu:

Vysvetlite nasledujúci kód riadok po riadku a napíšte (1) čo robí, (2) možné problémy s výkonom (pridelenie na snímku, drahé vyhľadávanie), (3) možné chyby, (4) návrhy na zlepšenie. Kód: [prilepiť]

3) Bezpečnostný audit pre viacerých hráčov:

Pre bezpečnosť skontrolujte nasledujúci kód pre viacerých hráčov. Konkrétne: miesta, kde je klient dôveryhodný, kritický stav, ktorý je potrebné overiť na serveri (poškodenie, body, peniaze), chýbajúca validácia vstupu. Navrhnúť opravu, aby sa server stal autoritatívnym. Toto je len na obranu mojej vlastnej hry. Kód: [prilepiť]

4) Refaktor zameraný na výkonnostný profil:

Tento kód beží na každom rámci a znižuje počet snímok za sekundu: [kód]. Nájdite alokácie, drahé vyhľadávania a zbytočné operácie po jednotlivých snímkach; Optimalizujte bez narušenia správania pomocou vyrovnávacej pamäte a menej častých aktualizácií. Vysvetlite zmeny.

Slabá výzva / Silná výzva

Slabá výzva:

Napíšte ukladací systém v Unity.

Žiadna verzia, formát, rozsah údajov, bezpečnosť; Výsledok je všeobecný a riskantný.

Výkonná výzva:

Motor: Unity 2022.3, C#. Úloha: Systém ukladania/načítania založený na JSON. Na uloženie: umiestnenie hráča, inventár, postup. Obmedzenie: získajte správu chýb proti poškodeniu súborov; Pridajte do ukladacieho súboru kontrolu integrity (hash), aby ste zabránili podvádzaniu jednoduchou zmenou v prehrávači. Komentujte kód a overte, že každé API je v tejto verzii.

Verzia, rozsah, spracovanie chýb a kontrola integrity sprísňujú výstup.

Kontextová tabuľka motora/jazyka

motora

jazyk

Čo musíte dať AI

osobitnú pozornosť

jednota

C#

Verzia, Vstupný/fyzikálny systém

Pridelenie aktualizácie, životný cyklus

neskutočné

Modrotlač

Verzia, kontext uzla

Limity vizuálnej logiky

neskutočné

C++

Verzia, štruktúra modulu

Pamäť, GC, makrá

multiplayer

oboje

sieťový model

Moderátor-autoritárstvo

Časté chyby

  • Bez špecifikácie motora/verzie. Pochádza zo zastaraného alebo vymysleného API.
  • Dôverovať kódu bez toho, aby ste mu rozumeli. Hromadia sa neudržateľné dlhy.
  • Nie meranie výkonu. Prideľovanie snímok po snímkach ticho znižuje snímkovú frekvenciu.
  • Dôvera klientovi. V hre pre viacerých hráčov existuje chyba zabezpečenia.
  • Chcem celý systém naraz. Malý, testovateľný kus je bezpečnejší.

V súhrne

Umelá inteligencia je výkonným pomocníkom v kóde hry, ale vyžaduje si engine, verziu a architektonický kontext. Nevkladajte ho do projektu bez toho, aby ste si prečítali a neporozumeli kódu, skompilovali ho a otestovali a neskontrolovali výkon a bezpečnosť. Zachovajte autoritu servera v hre pre viacerých hráčov a používajte bezpečnostné informácie iba na účely obrany a overovania.

Aplikačná úloha

Vyberte si malý komponent (napr. dvojitý skok alebo jednoduchý inventár). Vygenerujte kód poskytnutím motora a verzie so šablónou „žiadosť o kód s kontextom“. Potom odstráňte riziká súvisiace s výkonom a chybami tak, že si rovnaký kód necháte skontrolovať pomocou šablóny „Popis/kontrola kódu“. Zostavte a otestujte kód v motore.

kontrolný zoznam

  • [ ] Dal som engine, verziu, jazyk a kontext architektúry.
  • [ ] Prečítal som a pochopil kód; Chcel som to s komentárom.
  • [ ] Zostavil som to a otestoval v motore a zmeral výkon.
  • [ ] Urobil som bezpečnostnú kontrolu v kóde siete/hospodárnosti/uložiť.
  • [ ] Bezpečnostné informácie som použil iba na obranu vlastnej hry.