Jedinica 7 / 11

Generiranje koda i integracija motora: Unity (C#) i Unreal (Blueprint/C++)

Dobici:

  • Sposobnost proizvodnje pouzdanog koda igre koji se može kompilirati iz umjetne inteligencije davanjem motora, verzije, jezika i arhitektonskog konteksta te njegove integracije čitanjem i razumijevanjem koda
  • Sposobnost upravljanja performansama specifičnim za kod igre (raspodjela po okviru), životnim ciklusom motora i rizicima halucinacija putem kompilacije, testiranja i profiliranja
  • Sposobnost primjene načela host-authority u igrama za više igrača i odgovornog korištenja sigurnosnih informacija samo za obranu i provjeru vlastite igre.

Igra je softver; Bez obzira koliko je dobro dizajniran, implementiran je s kodom. Motor igre je infrastruktura koja omogućuje pokretanje igre: Unity (široko korišteni motor skriptiran u C#) i Unreal Engine (motor koji koristi C++ i vizualni skriptni jezik Blueprint) dva su najčešća. AI je jedno od najzrelijih pomagala u generiranju koda: kontroler igrača, sustav inventara, automati stanja, spremanje/učitavanje, logika sučelja, debugging i refactoring (refactoring koda bez narušavanja njegovog ponašanja). Ali kod igre ima svoje vlastite zamke: performanse (broj sličica u sekundi), životni ciklus motora, sigurnost za više igrača. U ovoj ćete jedinici naučiti kako sigurno i učinkovito koristiti AI u kodu igre.

Kritično načelo: kontekst motora i verzije

Ako AI ne zna za koji motor i verziju piše, proizvest će zbunjujući, zastarjeli ili nepostojeći API. Stoga dajte kontekst motora, verzije, jezika i arhitekture u svakom upitu koda. "Piši pokret igrača za Unity" je slab; "Unity 2022.3, C#, novi sustav unosa, fizički pokret temeljen na krutom tijelu" je moćan. Navedite želite li Blueprint ili C++ u Unrealu i koju verziju koristite.

Siguran tijek koda korak po korak:

  1. Navedite kontekst (motor, verzija, jezik, trenutna arhitektura, ograničenja).
  2. Želite da bude mali i definiran (pojedinačna komponenta, a ne cijeli sustav).
  3. Pročitajte i razumite kod (razumite što radi red po red; nemojte stavljati kod koji ne razumijete).
  4. Izradite i testirajte (radite na motoru; profil — mjerenje performansi).
  5. Prepraviti i integrirati (podudarati se sa standardom projekta).
Savjet: kada od umjetne inteligencije tražite kôd, recite "objasni s komentarima". Vaš cilj je razumjeti kod; Stavljanje AI koda koji ne razumijete u projekt nagomilat će neodrživ dug. Također tražite kod u malim dijelovima koji se mogu testirati: Umjesto sustava od 500 linija, komponentu od 30-50 linija koja radi jedan definirani posao je lako provjeriti i integrirati.

Zamke specifične za kod igre

Izvedba. Kod igre se pokreće 30-60+ puta u sekundi. AI može staviti skupe operacije (dodjela memorije, traženje, manipulacija nizovima) u petlju ažuriranja koja se izvodi na svakom okviru; to smanjuje broj sličica u sekundi. Profilirajte kritične kodove za izvedbu i dajte AI ograničenja kao što je "pokretanje na svakom okviru, bez dodjele".

Životni ciklus motora. AI ponekad zbuni kada se pozivaju posebne metode, kao što su Awake/Start/Update u Unityju, BeginPlay/Tick u Unrealu. Uhvatite pogreške životnog ciklusa testiranjem.

Sigurnost za više igrača. Ovo je najkritičnije pitanje u smislu IT/sigurnosti. Nikada ne vjerujte klijentu u igri za više igrača: klijent na računalu igrača može biti manipuliran za varanje. Provjerite kritični status kao što su bodovi, šteta, novac na poslužitelju (server-autoritativno). Kontrolirajte mrežni kod koji generira AI protiv ovog načela; Ako je umjetna inteligencija stvorila ranjivost u kojoj klijent vjeruje, popravite je. Koristite ove informacije samo za obranu i provjeru vlastite igre; Neovlašteni pristup ili varanje na tuđem poslužitelju je nezakonito i neetično.

Oprez: kod generiran umjetnom inteligencijom može sadržavati ranjivosti (nedostaje provjera valjanosti unosa, povjerenje klijenta, manipulacija spremanjem datoteke). Nemojte slijepo prihvatiti kod; Izvršite sigurnosni pregled, posebice mreže, ekonomije i koda za spremanje.

Dug za arhitekturu i održavanje

AI brzo proizvodi pojedinačne funkcije; Ali arhitektura igre - kako su sustavi podijeljeni, kako međusobno komuniciraju, gdje se podaci čuvaju - dugoročna je odluka i pripada ljudima. Ako kažete umjetnoj inteligenciji da "napiše cijeli inventar, sustav borbe i spašavanja zajedno", dobit ćete funkcionalno, ali čvrsto povezano klupko niti koje se teško održava i koje se ne može proširiti. Umjesto toga, vi dizajnirate arhitekturu, koristite AI za popunjavanje malih komponenti s definiranim sučeljima. Dobra arhitektura čini razliku kako igra raste: loše odluke vraćaju se godinu dana kasnije kao tehnički dug koji odgađa svaku novu značajku.

Drugi izvor duga za održavanje je kod koji ulazi u projekt, a da ga se ne razumije. Sustav koji je napisao AI mogao bi funkcionirati danas; Ali kad ga nakon šest mjeseci morate zamijeniti i nitko se ne sjeća što je napravio, dug se pretvara u kamate. Zato su bitne dvije discipline: čitanje i razumijevanje koda u vrijeme proizvodnje i traženje pojašnjavajućih komentara od umjetne inteligencije. Kao pravilo, ne stavljajte AI kod u svoj projekt koji ne možete sami prepisati ili barem objasniti redak po redak. AI daje brzinu; Vaša disciplina daje održivost.

tri mini kućišta

Slučaj 1 — kontekst izdanja spriječio je pogrešku. Programer je prvo rekao: "Napišite inventar za Unity"; kod je koristio stari API, nije se preveo. Zatim je dao kontekst "Unity 2022.3, C#, temeljen na ScriptableObject"; kod je kompajliran prvi put i odgovara projektu. Kontekst je uštedio sat otklanjanja pogrešaka.

Slučaj 2 — Zamka performansi. U jednoj igri broj sličica u sekundi bio je nizak. Prilikom profiliranja, vidjelo se da je metoda ažuriranja koju je proizvela AI dodijelila novi popis u svakom okviru i tražila neprijatelje. Popravljen je kod s predmemoriranom referencom i nekvadratnim ažuriranjem, povećavajući broj sličica u sekundi s 42 na 60.

Slučaj 3 — Uhvaćena je sigurnosna ranjivost. U igri za više igrača, AI-generirani kod izračunao je štetu na klijentu i prijavio je poslužitelju; ovo je bilo otvoreno za varanje (klijent je mogao nanijeti beskonačnu štetu). Kod je autoritaran prema poslužitelju (poslužitelj izračunava štetu). Revizijom je spriječen skandal s varanjem nakon objave.

Četiri predloška za kopiranje

1) Zahtjev za kod s kontekstom:

Motor: Unity 2022.3. Jezik: C#. Arhitektura: [npr. temeljeno na komponenti]. Ograničenje: Dodjela u ažuriranju; biti čitljiv i komentiran.Zadatak: [pojedinačna, definirana komponenta, npr. "kontroler znakova s ​​dvostrukim skokom"]. Provjerite je li svaki API koji koristite u ovoj verziji; Ako niste sigurni, javite mi.

2) Objašnjenje koda/pregled:

Objasnite sljedeći kod red po red i napišite (1) što radi, (2) moguće probleme s izvedbom (dodjela po okviru, skupo pretraživanje), (3) moguće greške, (4) prijedloge za poboljšanje. Kôd: [zalijepi]

3) Sigurnosna revizija za više igrača:

Pregledajte sljedeći kod za više igrača radi sigurnosti. Konkretno: mjesta gdje se klijentu vjeruje, kritično stanje koje treba provjeriti na poslužitelju (šteta, bodovi, novac), nedostaje validacija unosa. Predložite popravak da poslužitelj postane autoritaran. Ovo je samo za obranu vlastite igre. Šifra: [zalijepi]

4) Refaktor usmjeren na profil izvedbe:

Ovaj kod radi na svakom okviru i smanjuje broj sličica u sekundi: [kod].Pronađi dodjele, skupe pretrage i nepotrebne operacije okvir po okvir; Optimizirajte bez prekidanja ponašanja s predmemorijom i rjeđim ažuriranjima. Objasnite promjene.

Slab upit / Jak upit

Slab upit:

Napišite sustav spremanja u Unityju.

Nema verzije, formata, opsega podataka, sigurnosti; Rezultat je općenit i riskantan.

Snažan upit:

Motor: Unity 2022.3, C#. Zadatak: Sustav za spremanje/učitavanje temeljen na JSON-u. Za spremanje: lokacija igrača, inventar, napredak. Ograničenje: dobiti upravljanje pogreškama protiv oštećenja datoteke; Dodajte provjeru integriteta (hash) u datoteku za spremanje kako biste spriječili varanje jednostavnom promjenom od strane igrača. Komentirajte kôd i provjerite je li svaki API na ovoj verziji.

Određivanje verzija, opseg, rukovanje pogreškama i provjera integriteta očvršćuju izlaz.

Kontekstna tablica motora/jezika

motor

jeziku

Što morate dati AI

posebnu pozornost

jedinstvo

C#

Verzija, Ulazni/fizički sustav

Ažuriraj dodjelu, životni ciklus

nestvarno

Nacrt

Verzija, kontekst čvora

Vizualna logička ograničenja

nestvarno

C++

Verzija, struktura modula

Memorija, GC, makronaredbe

multiplayer

oboje

mrežni model

Voditelj-autoritarnost

Uobičajene greške

  • Ne navodi se motor/verzija. Dolazi iz zastarjelog ili izmišljenog API-ja.
  • Vjerovanje kodu bez razumijevanja. Nagomilava se neodrživ dug.
  • Ne mjerenje učinka. Dodjela okvir po okvir tiho smanjuje broj sličica u sekundi.
  • Povjerenje klijentu. Postoji ranjivost varanja u igri za više igrača.
  • Želja cijelog sustava odjednom. Mali komad koji se može testirati je sigurniji.

Ukratko

AI je moćan pomoćnik u kodu igre, ali zahtijeva motor, verziju i arhitektonski kontekst. Nemojte ga stavljati u projekt bez čitanja i razumijevanja koda, kompajliranja i testiranja te provjere performansi i sigurnosti. Održavajte autoritarnost poslužitelja u igri za više igrača i koristite sigurnosne informacije samo u obrambene svrhe i svrhe provjere.

Zadatak aplikacije

Odaberite malu komponentu (npr. dvostruki skok ili jednostavan inventar). Generirajte kod pružanjem mehanizma i verzije s predloškom "zahtjeva za kod s kontekstom". Zatim uklonite rizike performansi i grešaka davanjem istog koda na pregled s predloškom "Opis/pregled koda". Prevedite i testirajte kod u motoru.

popis za provjeru

  • [ ] Dao sam motor, verziju, jezik i kontekst arhitekture.
  • [ ] Pročitao sam i razumio kod; Htio sam to s komentarom.
  • [ ] Sastavio sam ga i testirao u motoru i izmjerio performanse.
  • [ ] Obavio sam sigurnosnu provjeru koda mreže/ekonomije/spremanja.
  • [ ] Koristio sam sigurnosne informacije samo za obranu vlastite igre.