Üksus 7 / 11

Koodi genereerimine ja mootori integreerimine: Unity (C#) ja Unreal (Blueprint/C++)

Kasu:

  • Võimalus toota tehisintellektist usaldusväärset, kompileeritavat mängukoodi, andes mootori, versiooni, keele ja arhitektuurilise konteksti, ning integreerida seda koodi lugemise ja mõistmise kaudu
  • Võime hallata mängu koodipõhist jõudlust (jaotus kaadri kohta), mootori elutsüklit ja hallutsinatsiooniriske kompileerimise, testimise ja profiilide koostamise kaudu
  • Oskus rakendada mitme mängijaga mängudes host-autoriteedi põhimõtet ning kasutada turvateavet vastutustundlikult ainult enda mängu kaitsmiseks ja kontrollimiseks.

Mäng on tarkvara; Ükskõik kui hästi see on kujundatud, rakendatakse seda koodiga. Mängumootor on infrastruktuur, mis paneb mängu käima: Unity (laialt kasutatav mootor, mis on kirjutatud C# keeles) ja Unreal Engine (mootor, mis kasutab C++ ja visuaalset skriptikeelt Blueprint) on kaks kõige levinumat. AI on üks küpsemaid abivahendeid koodide genereerimisel: mängija kontroller, inventarisüsteem, olekumasinad, salvestamine/laadimine, liidese loogika, silumine ja ümbertegemine (koodi ümberkujundamine selle käitumist rikkumata). Kuid mängukoodil on omad lõksud: jõudlus (kaadrisagedus), mootori elutsükkel, mitme mängijaga mängu turvalisus. Selles üksuses saate teada, kuidas AI-d mängukoodis ohutult ja tõhusalt kasutada.

Kriitiline põhimõte: mootori ja versiooni kontekst

Kui tehisintellekt ei tea, millise mootori ja versiooni jaoks ta kirjutab, loob see segase, vananenud või olematu API. Seega esitage igas koodiviipas mootor, versioon, keel ja arhitektuur. "Kirjutage mängija liikumist Ühtsusele" on nõrk; "Unity 2022.3, C#, uus sisendsüsteem, jäigal kehal põhinev füüsika liikumine" on võimas. Määrake, kas soovite Unrealis Blueprinti või C++ ja millist versiooni te kasutate.

Turvaline koodivoog samm-sammult:

  1. Andke kontekst (mootor, versioon, keel, praegune arhitektuur, piirangud).
  2. Tahad, et see oleks väike ja määratletud (üks komponent, mitte kogu süsteem).
  3. Lugege koodi ja mõistke seda (saage aru, mida see teeb; ärge sisestage koodi, millest te aru ei saa).
  4. Ehitage ja katsetage (töötage mootoriga; profiil – mõõtke jõudlust).
  5. Refaktoreeri ja integreeri (vastab projekti standardile).
Näpunäide: tehisintellektilt koodi küsides öelge "selgitage kommentaaridega". Teie eesmärk on koodist aru saada; AI-koodi panemine projekti, millest te aru ei saa, koguneb säilitamatu võlg. Küsige koodi ka väikeste, testitavate tükkidena: 500-realise süsteemi asemel on 30–50-realist komponenti, mis teeb ühte määratletud tööd, lihtne kontrollida ja integreerida.

Mängu koodile omased püünised

Esitus. Mängu kood jookseb 30-60+ korda sekundis. Tehisintellekt võib panna kallid toimingud (mälu eraldamine, otsing, stringidega manipuleerimine) iga kaadri juures jooksvasse värskendusahelasse; see vähendab kaadrisagedust. Profiili jõudluse kriitilised koodid ja tehisintellekti piirangud, näiteks "käivita igal kaadris, ilma eraldamiseta".

Mootori elutsükkel. Tehisintellekt ajab mõnikord segadusse, kui kutsutakse välja erimeetodeid, näiteks Unity'is Awake/Start/Update, Unrealis BeginPlay/Tick. Testige elutsükli vead.

Mitme mängijaga turvalisus. See on IT/turvalisuse seisukohalt kõige kriitilisem probleem. Ärge kunagi usaldage klienti mitmikmängus: mängija arvutis olevat klienti saab petmiseks manipuleerida. Kontrollige kriitilist olekut, nagu punktid, kahjustused, raha serveris (server-autoriteetne). Selle põhimõtte alusel saate juhtida tehisintellekti loodud võrgukoodi; Kui AI on loonud kliente usaldava haavatavuse, parandage see. Kasutage seda teavet ainult oma mängu kaitsmiseks ja kontrollimiseks; Volitamata juurdepääs kellegi teise serverile või selle petmine on ebaseaduslik ja ebaeetiline.

Ettevaatust: AI loodud kood võib sisaldada turvaauke (puudub sisendi valideerimine, kliendi usaldus, salvestusfaili manipuleerimine). Ärge aktsepteerige koodi pimesi; Tehke turvaülevaade, eriti võrgu, majanduse ja koodi salvestamise kohta.

Arhitektuuri- ja hooldusvõlg

AI toodab kiiresti üksikuid funktsioone; Kuid mängu arhitektuur – kuidas süsteemid jagunevad, kuidas nad omavahel räägivad, kus andmeid hoitakse – on pikaajaline otsus ja see kuulub inimesele. Kui käsite tehisintellektil "kirjutada kogu inventar, võidelda ja salvestada süsteem koos", saate töötava, kuid tihedalt ühendatud, raskesti hooldatava, mittepaisuva lõngakera. Selle asemel kujundate arhitektuuri ja kasutage AI-d, et sisestada väikesed komponendid määratletud liidestega. Hea arhitektuur muudab mängu kasvades: halvad otsused tulevad aasta hiljem tagasi tehnilise võlana, mis lükkab iga uue funktsiooni edasi.

Teine elatisvõlgade allikas on kood, mis siseneb projekti ilma, et sellest aru saadaks. Tehisintellekti kirjutatud süsteem võiks täna töötada; Aga kui kuus kuud hiljem tuleb see välja vahetada ja keegi ei mäleta, mida nad tegid, muutub võlg intressiks. Seetõttu on olulised kaks distsipliini: koodi lugemine ja mõistmine tootmise ajal ning selgituste küsimine tehisintellektilt. Rusikareegel on, et ärge pange oma projekti tehisintellekti koodi, mida te ei saa ise ümber kirjutada või vähemalt rida-realt seletada. AI annab kiiruse; Teie distsipliin annab jätkusuutlikkuse.

kolm minikarpi

Juhtum 1 – väljalaske kontekst vältis vea. Programmeerija ütles kõigepealt: "Kirjutage Unity jaoks inventarinimekirja"; kood kasutas vana API-d, seda ei kompileeritud. Seejärel andis see konteksti "Unity 2022.3, C#, põhineb ScriptableObjectil"; esimest korda koostatud kood ja sobis projektiga. Kontekst säästis tund aega silumist.

Juhtum 2 – jõudluslõks. Ühes mängus oli kaadrisagedus madal. Profileerimisel oli näha, et AI-i toodetud värskendusmeetod eraldas igas kaadris uue loendi ja otsis vaenlasi. Parandatud kood vahemällu salvestatud viite ja mitteruudulise värskendusega, suurendades kaadrisagedust 42-lt 60-le.

Juhtum 3 – tabati turvahaavatavus. Mitme mängijaga mängus arvutas tehisintellekti loodud kood kliendi kahju ja teatas sellest serverile; see oli avatud petmiseks (klient võis tekitada lõpmatut kahju). Kood on muudetud serverautoritaarseks (server arvutab kahju). Audit hoidis ära avaldamisjärgse petmisskandaali.

Neli kopeeritavat malli

1) Kooditaotlus koos kontekstiga:

Mootor: Unity 2022.3. Keel: C#. Arhitektuur: [nt. komponendipõhine]. Piirang: Värskenduses jaotamine; olema loetav ja kommenteeritav.Ülesanne: [üksik, määratletud komponent, nt. "topelthüppe märgikontroller"]. Veenduge, et iga teie kasutatav API on selles versioonis; Kui te pole kindel, andke mulle teada.

2) Koodi selgitus/ülevaatus:

Selgitage järgmist koodi rida rea haaval ja kirjutage (1) mida see teeb, (2) võimalikud jõudlusprobleemid (eraldamine kaadri kohta, kallis otsing), (3) võimalikud vead, (4) parandusettepanekud. Kood: [kleebi]

3) Mitme mängijaga turvaaudit:

Turvalisuse tagamiseks uurige järgmist mitme mängijaga mängukoodi. Täpsemalt: kohad, kus klienti usaldatakse, kriitiline olek, mis vajab kontrollimist serveris (kahjustused, punktid, raha), puudub sisendi valideerimine. Soovitage parandust serveri autoritaarseks muutmiseks. See on lihtsalt minu enda mängu kaitsmiseks. Kood: [kleebi]

4) Toimivusprofiilile keskendunud refaktor:

See kood töötab igal kaadril ja vähendab kaadrisagedust: [kood]. Otsige eraldamisi, kulukaid otsinguid ja mittevajalikke toiminguid kaadri kaupa; Optimeerige käitumist rikkumata vahemällu salvestamise ja harvemate värskenduste abil. Selgitage muudatusi.

Nõrk viip / Tugev viip

Nõrk viip:

Kirjutage Unity'is salvestussüsteem.

Puudub versioon, formaat, andmete ulatus, turvalisus; Tulemus on üldine ja riskantne.

Võimas viip:

Mootor: Unity 2022.3, C#. Ülesanne: JSON-põhine salvestamis-/laadimissüsteem. Salvestatav: mängija asukoht, inventar, edenemine. Piirang: hankige veahaldus failide rikkumiste vastu; Lisage salvestusfailile terviklikkuse kontroll (räsi), et vältida pettust, muutes seda hõlpsalt mängija poolt. Kommenteerige kood ja veenduge, et iga API on selles versioonis.

Versioonide koostamine, ulatus, vigade käsitlemine ja terviklikkuse kontrollimine tugevdavad väljundit.

Mootori/keele kontekstitabel

mootor

keel

Mida peate AI-le andma

erilist tähelepanu

ühtsus

C#

Versioon, sisend/füüsikasüsteem

Uuenda jaotust, elutsüklit

ebareaalne

Plaan

Versioon, sõlme kontekst

Visuaalse loogika piirid

ebareaalne

C++

Versioon, mooduli struktuur

Mälu, GC, makrod

mitme mängijaga

mõlemad

võrgu mudel

Saatejuht-autoritaarsus

Levinud vead

  • Mootorit/versiooni ei täpsusta. See pärineb aegunud või väljamõeldud API-st.
  • Usaldage koodi ilma sellest aru saamata. Hooldamatu võlg koguneb.
  • Ei mõõda jõudlust. Kaader kaadri haaval jaotamine vähendab vaikselt kaadrisagedust.
  • Klienti usaldades. Mitme mängijaga mängus on petmise haavatavus.
  • Tahaks kogu süsteemi korraga. Väike, testitav tükk on turvalisem.

Kokkuvõttes

AI on võimas abimees mängukoodis, kuid see nõuab mootorit, versiooni ja arhitektuurilist konteksti. Ärge pange seda projekti ilma koodi lugemata ja sellest aru saamata, seda koostamata ja testimata ning jõudlust ja turvalisust kontrollimata. Säilitage mitme mängijaga mängus serveri autoritaarsus ja kasutage turvateavet ainult kaitse- ja kontrollieesmärkidel.

Rakenduse ülesanne

Valige väike komponent (nt topelthüpe või lihtne inventar). Genereerige kood, lisades mootori ja versiooni malliga "Koodipäring kontekstiga". Seejärel eemaldage jõudlus- ja veariskid, lastes sama koodi üle vaadata malliga „Koodi kirjeldus/ülevaatus”. Kompileerige ja testige koodi mootoris.

kontrollnimekiri

  • [ ] Andsin mootori, versiooni, keele ja arhitektuuri konteksti.
  • [ ] Lugesin koodi ja sain sellest aru; Tahtsin seda koos kommentaariga.
  • [ ] Koostasin ja katsetasin seda mootoris ning mõõtsin jõudlust.
  • [ ] Tegin võrgus/majanduse/salvestamiskoodis turvakontrolli.
  • [ ] Kasutasin turvateavet ainult enda mängu kaitsmiseks.