Enota 7 / 11

Generiranje kode in integracija motorja: Unity (C#) in Unreal (Blueprint/C++)

Dobički:

  • Sposobnost izdelave zanesljive kode igre, ki jo je mogoče prevesti iz umetne inteligence, tako da podate motor, različico, jezik in arhitekturni kontekst ter jo integrirate z branjem in razumevanjem kode
  • Sposobnost upravljanja zmogljivosti, specifične za kodo igre (dodelitev na okvir), življenjskega cikla motorja in tveganj halucinacij s kompilacijo, testiranjem in profiliranjem
  • Sposobnost uporabe načela avtoritete gostitelja v igrah za več igralcev in odgovorne uporabe varnostnih informacij samo za obrambo in preverjanje lastne igre.

Igra je programska oprema; Ne glede na to, kako dobro je zasnovan, je implementiran s kodo. Motor igre je infrastruktura, ki omogoča delovanje igre: Unity (široko uporabljan motor, skriptiran v C#) in Unreal Engine (motor, ki uporablja C++ in vizualni skriptni jezik Blueprint) sta najpogostejša. Umetna inteligenca je eden najbolj zrelih pripomočkov pri ustvarjanju kode: krmilnik predvajalnika, sistem inventarja, stanje stroji, shranjevanje/nalaganje, logika vmesnika, razhroščevanje in preoblikovanje kode (preoblikovanje kode brez porušitve njenega delovanja). Toda koda igre ima svoje lastne pasti: zmogljivost (hitrost sličic), življenjski cikel motorja, varnost za več igralcev. V tej enoti se boste naučili varno in učinkovito uporabljati AI v kodi igre.

Kritično načelo: kontekst motorja in različice

Če AI ne ve, za kateri motor in različico piše, bo ustvaril zmeden, zastarel ali neobstoječ API. Zato v vsakem pozivu za kodo navedite kontekst motorja, različice, jezika in arhitekture. »Zapiši gibanje igralca za Unity« je šibko; »Unity 2022.3, C#, nov vnosni sistem, gibanje fizike na osnovi togega telesa« je zmogljivo. Določite, ali želite Blueprint ali C++ v Unreal in katero različico uporabljate.

Varen tok kode korak za korakom:

  1. Navedite kontekst (motor, različica, jezik, trenutna arhitektura, omejitve).
  2. Želite, da je majhen in definiran (ena komponenta, ne celoten sistem).
  3. Preberite in razumejte kodo (razumite, kaj počne vrstico za vrstico; ne postavljajte kode, ki je ne razumete).
  4. Zgradite in preizkusite (zagon na motorju; profil — merjenje zmogljivosti).
  5. Predelava in integracija (ujema se s standardom projekta).
Namig: Ko od AI zahtevate kodo, recite "explain with comments". Vaš cilj je razumeti kodo; Če v projekt vstavite kodo AI, ki je ne razumete, boste nakopičili nevzdržen dolg. Zahtevajte tudi kodo v majhnih kosih, ki jih je mogoče preizkusiti: namesto sistema s 500 vrsticami je komponento s 30–50 vrsticami, ki opravlja eno samo definirano delo, enostavno preveriti in integrirati.

Pasti, specifične za kodo igre

Učinkovitost. Koda igre se zažene 30-60+ krat na sekundo. AI lahko postavi drage operacije (dodeljevanje pomnilnika, iskanje, manipulacija z nizi) v posodobitveno zanko, ki se izvaja pri vsakem okvirju; to zmanjša hitrost sličic. Profilirajte kritične kode za delovanje in navedite omejitve umetne inteligence, kot je "zagon na vsakem okvirju, brez dodelitve".

Življenjski cikel motorja. AI včasih povzroči zmedo pri klicu posebnih metod, kot so Awake/Start/Update v Unity, BeginPlay/Tick v Unreal. Ujemite napake življenjskega cikla s testiranjem.

Varnost za več igralcev. To je najbolj kritično vprašanje v smislu IT/varnosti. Nikoli ne zaupajte odjemalcu v igri za več igralcev: z odjemalcem v igralčevem računalniku je mogoče manipulirati za goljufanje. Preverite kritično stanje, kot so točke, škoda, denar na strežniku (verodostojno za strežnik). Nadzirajte omrežno kodo, ki jo ustvari AI v skladu s tem načelom; Če je umetna inteligenca ustvarila ranljivost, ki odjemalcem zaupa, jo popravite. Uporabite te informacije samo za obrambo in preverjanje lastne igre; Nepooblaščen dostop do strežnika nekoga drugega ali goljufanje na njem je nezakonito in neetično.

Pozor: koda, ustvarjena z umetno inteligenco, lahko vsebuje ranljivosti (manjkajoče preverjanje vnosa, zaupanje odjemalca, manipulacija s shranjenimi datotekami). Ne sprejmite kode na slepo; Izvedite varnostni pregled, zlasti omrežja, ekonomije in kode za shranjevanje.

Arhitekturni in vzdrževalni dolg

AI hitro proizvaja posamezne funkcije; Toda arhitektura igre – kako so sistemi razdeljeni, kako se med seboj pogovarjajo, kje se hranijo podatki – je dolgoročna odločitev in pripada človeku. Če umetni inteligenci rečete, naj "skupaj napiše celoten inventar, boj in sistem shranjevanja", dobite delujoč, a tesno povezan klobčič preje, ki ga je težko vzdrževati in ga ni mogoče razširiti. Namesto tega oblikujete arhitekturo, uporabite AI za zapolnitev majhnih komponent z definiranimi vmesniki. Dobra arhitektura naredi razliko, ko igra raste: slabe odločitve se vrnejo leto kasneje kot tehnični dolg, ki odloži vsako novo funkcijo.

Drugi vir dolga za vzdrževanje je koda, ki vstopi v projekt, ne da bi jo razumeli. Sistem, ki ga je napisal AI, bi lahko deloval danes; Ko pa ga moraš čez šest mesecev zamenjati in se nihče ne spomni, kaj je naredil, se dolg spremeni v obresti. Zato sta bistveni dve disciplini: branje in razumevanje kode v času izdelave ter zahtevanje pojasnilnih pripomb AI. Pravilo je, da v svoj projekt ne vstavljajte kode AI, ki je ne morete sami prepisati ali vsaj razložiti vrstico za vrstico. AI daje hitrost; Vaša disciplina daje trajnost.

trije mini kovčki

1. primer – kontekst izdaje je preprečil napako. Programer je najprej rekel: "Napišite inventar za Unity"; koda je uporabljala star API, ni se prevedel. Nato je podal kontekst "Unity 2022.3, C#, ki temelji na ScriptableObject"; koda je bila prvič prevedena in je ustrezala projektu. Kontekst je prihranil eno uro odpravljanja napak.

Primer 2 – past uspešnosti. V eni igri je bila hitrost sličic nizka. Pri profiliranju je bilo ugotovljeno, da je metoda Posodobitev, ki jo je ustvaril AI, v vsakem okvirju dodelila nov seznam in poiskala sovražnike. Popravljena koda s predpomnjeno referenco in nekvadratno posodobitvijo, s čimer se je hitrost sličic povečala z 42 na 60.

Primer 3 – Ugotovljena varnostna ranljivost. V igri za več igralcev je koda, ustvarjena z umetno inteligenco, izračunala škodo na odjemalcu in jo sporočila strežniku; to je bilo odprto za goljufanje (stranka bi lahko povzročila neskončno škodo). Koda je avtoritarna (strežnik izračuna škodo). Revizija je preprečila škandal z goljufanjem po objavi.

Štiri predloge za kopiranje

1) Zahteva za kodo s kontekstom:

Motor: Unity 2022.3. Jezik: C#. Arhitektura: [npr. na podlagi komponent]. Omejitev: dodeljevanje v posodobitvi; biti berljiv in komentiran.Naloga: [enotna, definirana sestavina, npr. "krmilnik znakov z dvojnim skokom"]. Preverite, ali je vsak API, ki ga uporabljate, v tej različici; Če niste prepričani, mi sporočite.

2) Razlaga/pregled kode:

Razložite naslednjo kodo vrstico za vrstico in napišite (1) kaj počne, (2) možne težave z delovanjem (dodelitev na okvir, drago iskanje), (3) možne napake, (4) predloge za izboljšave. Koda: [prilepi]

3) Varnostna revizija za več igralcev:

Za varnost preglejte naslednjo kodo za več igralcev. Natančneje: mesta, kjer je stranka zaupanja vredna, kritično stanje, ki ga je treba preveriti na strežniku (škoda, točke, denar), manjkajoča validacija vnosa. Predlagajte popravek, da bi strežnik postal avtoritaren. To je samo za obrambo lastne igre. Koda: [prilepi]

4) Refaktor, osredotočen na profil uspešnosti:

Ta koda se izvaja na vsakem okvirju in zmanjša hitrost sličic: [koda]. Poiščite dodelitve, draga iskanja in nepotrebne operacije okvir za okvirjem; Optimizirajte brez motenj delovanja s predpomnjenjem in manj pogostimi posodobitvami. Pojasnite spremembe.

Šibek poziv/močan poziv

Šibek poziv:

Napišite sistem za shranjevanje v Unity.

Brez različice, formata, obsega podatkov, varnosti; Rezultat je splošen in tvegan.

Močan poziv:

Motor: Unity 2022.3, C#. Naloga: sistem za shranjevanje/nalaganje, ki temelji na JSON. Shrani se: lokacija igralca, inventar, napredek. Omejitev: pridobite upravljanje napak proti poškodbam datotek; Shranjevalni datoteki dodajte preverjanje celovitosti (hash), da preprečite goljufanje tako, da ga igralec preprosto spremeni. Komentirajte kodo in preverite, ali je vsak API v tej različici.

Različice, obseg, obravnavanje napak in preverjanje celovitosti utrdijo izhod.

Kontekstna tabela motorja/jezika

motor

jezik

Kaj moraš dati AI

posebna pozornost

enotnost

C#

Različica, vnos/fizikalni sistem

Posodobite dodelitev, življenjski cikel

neresnično

Načrt

Različica, kontekst vozlišča

Vizualne logične meje

neresnično

C++

Različica, struktura modula

Pomnilnik, GC, makri

več igralcev

oboje

omrežni model

Voditelj-avtoritarizem

Pogoste napake

  • Brez navedbe motorja/različice. Prihaja iz zastarelega ali narejenega API-ja.
  • Zaupanje kodi, ne da bi jo razumeli. Nevzdrževalni dolg se kopiči.
  • Brez merjenja uspešnosti. Dodeljevanje po sličicah tiho zmanjša hitrost sličic.
  • Zaupanje stranki. V igri za več igralcev obstaja ranljivost pri goljufanju.
  • Želeti celoten sistem naenkrat. Majhen kos, ki ga je mogoče preizkusiti, je varnejši.

Če povzamem

AI je močan pomočnik pri kodi igre, vendar zahteva motor, različico in arhitekturni kontekst. Ne vnašajte ga v projekt, ne da bi prebrali in razumeli kodo, jo prevedli in preizkusili ter preverili zmogljivost in varnost. Ohranite strežniško avtoritarnost v igri za več igralcev in uporabite varnostne informacije samo za namene obrambe in preverjanja.

Aplikacijska naloga

Izberite majhno komponento (npr. dvojni skok ali preprost inventar). Ustvarite kodo tako, da zagotovite mehanizem in različico s predlogo "zahteva za kodo s kontekstom". Nato odstranite tveganje za zmogljivost in hrošče tako, da pregledate isto kodo s predlogo »Opis/pregled kode«. Prevedite in preizkusite kodo v motorju.

kontrolni seznam

  • [ ] Podal sem motor, različico, jezik in kontekst arhitekture.
  • [ ] Prebral sem in razumel kodo; Hotel sem s komentarjem.
  • [ ] Sestavil sem in preizkusil v motorju ter izmeril zmogljivost.
  • [ ] Opravil sem varnostno preverjanje v omrežni/ekonomični/shranjevalni kodi.
  • [ ] Varnostne podatke sem uporabil samo za obrambo lastne igre.