Vienetas 7 / 11

Kodo generavimas ir variklio integravimas: „Unity“ (C#) ir „Unreal“ („Blueprint“ / C++)

Pelnas:

  • Galimybė sukurti patikimą, kompiliuojamą žaidimo kodą iš dirbtinio intelekto, suteikiant variklį, versiją, kalbą ir architektūrinį kontekstą, ir integruoti jį skaitant ir suprantant kodą
  • Gebėjimas valdyti žaidimo kodo našumą (paskirstymas vienam kadrui), variklio gyvavimo ciklą ir haliucinacijų riziką kompiliuojant, testuojant ir profiliuojant
  • Gebėjimas kelių žaidėjų žaidimuose taikyti šeimininko autoriteto principą ir atsakingai naudoti saugumo informaciją tik savo žaidimui apginti ir patikrinti.

Žaidimas yra programinė įranga; Kad ir kaip gerai jis būtų sukurtas, jis įgyvendinamas naudojant kodą. Žaidimo variklis yra infrastruktūra, kuri leidžia žaisti: Unity (plačiai naudojamas variklis, parašytas C#) ir Unreal Engine (variklis naudojant C++ ir vaizdinę scenarijų kalbą Blueprint) yra du dažniausiai naudojami. AI yra viena brandžiausių pagalbinių kodų generavimo priemonių: grotuvo valdiklis, inventoriaus sistema, būsenos mašinos, išsaugojimas/įkėlimas, sąsajos logika, derinimas ir pertvarkymas (kodo pertvarkymas nepažeidžiant jo elgesio). Tačiau žaidimo kodas turi savų spąstų: našumą (kadrų dažnį), variklio gyvavimo ciklą, kelių žaidėjų saugumą. Šiame skyriuje sužinosite, kaip saugiai ir efektyviai naudoti AI žaidimo kode.

Kritinis principas: variklio ir versijos kontekstas

Jei AI nežino, kuriam varikliui ir versijai rašo, jis sukurs supainiotą, pasenusią arba neegzistuojančią API. Taigi kiekviename kodo ragelyje nurodykite variklio, versijos, kalbos ir architektūros kontekstą. „Rašyti žaidėjų judėjimą vienybei“ yra silpnas; „Unity 2022.3“, C#, nauja įvesties sistema, standžiu korpusu pagrįstas fizikos judėjimas“ yra galingas. Nurodykite, ar „Unreal“ norite „Blueprint“ ar „C++“ ir kurią versiją naudojate.

Saugus kodo srautas žingsnis po žingsnio:

  1. Pateikite kontekstą (variklį, versiją, kalbą, dabartinę architektūrą, apribojimus).
  2. Norite, kad jis būtų mažas ir apibrėžtas (vieno komponento, o ne visos sistemos).
  3. Perskaitykite ir supraskite kodą (supraskite, ką jis daro eilutę po eilutės; nedėkite kodo, kurio nesuprantate).
  4. Sukurkite ir išbandykite (paleiskite variklį; profilis – išmatuokite veikimą).
  5. Refaktorizuoti ir integruoti (atitinka projekto standartą).
Patarimas: Prašydami dirbtinio intelekto kodo, pasakykite „paaiškinkite komentarais“. Jūsų tikslas yra suprasti kodą; Įdėjus AI kodą, kurio nesuprantate, į projektą susikaups nepalaikoma skola. Taip pat paprašykite kodo mažais, testuojamais gabaliukais: vietoj 500 eilučių sistemos, 30–50 eilučių komponentą, kuris atlieka vieną apibrėžtą darbą, lengva patikrinti ir integruoti.

Spąstai, būdingi žaidimo kodui

Spektaklis. Žaidimo kodas veikia 30–60 ir daugiau kartų per sekundę. AI gali įdėti brangias operacijas (atminties paskirstymą, paiešką, manipuliavimą eilutėmis) į atnaujinimo kilpą, kuri vykdoma kiekviename kadre; tai sumažina kadrų dažnį. Sukurkite svarbius profilio našumo kodus ir suteikite AI apribojimus, pvz., „paleisti kiekviename kadre, be paskirstymo“.

Variklio gyvavimo ciklas. AI kartais painioja, kai iškviečiami specialūs metodai, pvz., Awake/Start/Update Unity, BeginPlay/Tick in Unreal. Išbandykite gyvavimo ciklo klaidas.

Kelių žaidėjų saugumas. Tai pati svarbiausia IT/saugumo problema. Niekada nepasitikėkite klientu kelių žaidėjų žaidime: žaidėjo kompiuteryje esantis klientas gali būti manipuliuojamas dėl sukčiavimo. Patikrinkite kritinę būseną, pvz., taškus, žalą, pinigus serveryje (serveris-autoritetas). Valdykite AI sugeneruotą tinklo kodą pagal šį principą; Jei AI sukūrė klientų pasitikėjimo pažeidžiamumą, ištaisykite jį. Naudokite šią informaciją tik norėdami apginti ir patikrinti savo žaidimą; Neteisėta prieiga prie kito serverio arba jo apgaudinėjimas yra neteisėta ir neetiška.

Įspėjimas: AI sukurtame kode gali būti pažeidžiamumų (trūksta įvesties patvirtinimo, kliento pasitikėjimo, manipuliavimo išsaugojimo failais). Aklai nepriimkite kodo; Atlikite saugos peržiūrą, ypač tinklo, ekonomikos ir išsaugokite kodą.

Architektūros ir priežiūros skola

AI greitai sukuria atskiras funkcijas; Tačiau žaidimo architektūra – kaip sistemos skirstomos, kaip jos kalbasi tarpusavyje, kur saugomi duomenys – yra ilgalaikis sprendimas ir priklauso žmogui. Jei liepsite dirbtiniam intelektui „surašyti visą inventorių, kovoti ir išsaugoti sistemą kartu“, gausite veikiantį, bet tvirtai sujungtą, sunkiai prižiūrimą, nesiplečiantį siūlų kamuoliuką. Vietoj to, jūs kuriate architektūrą, naudokite AI, kad užpildytumėte mažus komponentus su apibrėžtomis sąsajomis. Gera architektūra daro įtaką žaidimui augant: blogi sprendimai po metų grįžta kaip techninė skola, kuri atitolina kiekvieną naują funkciją.

Kitas išlaikymo skolos šaltinis yra kodas, kuris patenka į projektą nesuprantamas. AI sukurta sistema galėtų veikti šiandien; Tačiau kai po šešių mėnesių tenka jį pakeisti ir niekas neprisimena, ką padarė, skola virsta palūkanomis. Štai kodėl būtinos dvi disciplinos: kodo skaitymas ir supratimas gamybos metu ir paaiškinimų prašymas iš AI. Paprastai į savo projektą nedėkite jokio AI kodo, kurio negalėtumėte patys perrašyti ar bent paaiškinti eilutė po eilutės. AI suteikia greitį; Jūsų disciplina suteikia tvarumo.

trys mini dėklai

1 atvejis – leidimo kontekstas užkirto kelią klaidai. Pirmiausia programuotojas pasakė: „Rašykite inventorių vienybei“; kodas naudojo seną API, jis nebuvo sukompiliuotas. Tada jis suteikė kontekstą „Unity 2022.3, C#, remiantis ScriptableObject“; kodas sudarytas pirmą kartą ir atitiko projektą. Kontekstas sutaupė valandą derinimo.

2 atvejis – našumo spąstai. Viename žaidime kadrų dažnis buvo mažas. Profiliuojant buvo pastebėta, kad AI sukurtas atnaujinimo metodas kiekviename kadre paskyrė naują sąrašą ir ieškojo priešų. Ištaisytas kodas su talpykloje esančia nuoroda ir ne kvadratiniu atnaujinimu, padidinus kadrų dažnį nuo 42 iki 60.

3 atvejis – užfiksuotas saugos pažeidžiamumas. Kelių žaidėjų žaidime AI sukurtas kodas apskaičiavo kliento žalą ir pranešė apie tai serveriui; tai buvo atvira sukčiavimui (klientas galėjo padaryti begalinės žalos). Kodas buvo padarytas serverio autoritariniu (serveris apskaičiuoja žalą). Auditas užkirto kelią sukčiavimo skandalui po paskelbimo.

Keturi kopijuojami šablonai

1) Kodo užklausa su kontekstu:

Variklis: Unity 2022.3. Kalba: C#. Architektūra: [pvz. komponentas pagrįstas]. Apribojimas: paskirstymas atnaujinime; bti skaitomas ir komentuojamas.Uzduotis: [vienas, apibrtas komponentas, pvz. „dvigubo šuolio simbolių valdiklis“]. Patikrinkite, ar kiekviena jūsų naudojama API yra šios versijos; Jei nesate tikri, praneškite man.

2) Kodo paaiškinimas / peržiūra:

Eilutę po eilutės paaiškinkite šį kodą ir parašykite (1) ką jis daro, (2) galimas našumo problemas (paskirstymas vienam kadrui, brangi paieška), (3) galimos klaidos, (4) patobulinimo pasiūlymai.Kodas: [įklijuoti]

3) kelių žaidėjų saugumo auditas:

Norėdami užtikrinti saugumą, patikrinkite toliau pateiktą kelių žaidėjų kodą. Tiksliau: vietos, kur pasitikima klientu, kritinė būsena, kurią reikia patikrinti serveryje (žala, taškai, pinigai), trūksta įvesties patvirtinimo. Siūlykite pataisą, kad serveris būtų autoritarinis. Tai tik tam, kad apginčiau savo žaidimą. Kodas: [įklijuoti]

4) Našumo profilis orientuotas faktorius:

Šis kodas veikia kiekviename kadre ir sumažina kadrų dažnį: [kodas]. Raskite paskirstymus, brangias paieškas ir nereikalingas operacijas po kadro; Optimizuokite nepažeisdami elgesio naudodami talpyklą ir rečiau atnaujindami. Paaiškinkite pakeitimus.

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

Parašykite išsaugojimo sistemą Unity.

Nėra versijos, formato, duomenų apimties, saugumo; Rezultatas yra bendras ir rizikingas.

Galingas raginimas:

Variklis: Unity 2022.3, C#. Užduotis: JSON pagrįsta išsaugojimo / įkėlimo sistema. Išsaugoti: žaidėjo vieta, inventorius, progresas. Apribojimas: gauti klaidų valdymą nuo failų sugadinimo; Pridėkite vientisumo patikrą (maišos) prie išsaugojimo failo, kad išvengtumėte sukčiavimo, nes grotuvas lengvai jį pakeis. Komentuokite kodą ir patikrinkite, ar kiekviena API yra šios versijos.

Versijų kūrimas, apimtis, klaidų tvarkymas ir vientisumo tikrinimas sustiprina išvestį.

Variklio/kalbos kontekstinė lentelė

variklis

kalba

Ką turite duoti AI

ypatingas dėmesys

vienybė

C#

Versija, įvesties/fizikos sistema

Atnaujinkite paskirstymą, gyvavimo ciklą

nerealu

Brėžinys

Versija, mazgo kontekstas

Vizualinės logikos ribos

nerealu

C++

Versija, modulio struktūra

Atmintis, GC, makrokomandos

kelių žaidėjų

tiek

tinklo modelis

Pranešėjas-autoritarizmas

Dažnos klaidos

  • Variklio/versijos nenurodyta. Jis gaunamas iš pasenusios arba sukurtos API.
  • Pasitikėjimas kodu jo nesuprasdamas. Kaupiasi nepalaikomos skolos.
  • Nematuojant našumo. Kadras po kadro paskirstymas tyliai sumažina kadrų dažnį.
  • Pasitikėjimas klientu. Kelių žaidėjų žaidime yra apgaulės pažeidžiamumas.
  • Norisi visos sistemos vienu metu. Mažas, išbandomas gabalas yra saugesnis.

Apibendrinant

AI yra galingas žaidimo kodo pagalbininkas, tačiau tam reikia variklio, versijos ir architektūrinio konteksto. Neįdėkite jo į projektą neperskaitę ir nesupratę kodo, jo nesudarę ir neišbandę bei nepatikrinę našumo ir saugumo. Išlaikyti serverio autoritariškumą kelių žaidėjų režimu ir naudoti saugos informaciją tik gynybos ir tikrinimo tikslais.

Taikymo užduotis

Pasirinkite nedidelį komponentą (pvz., dvigubą šuolį arba paprastą inventorių). Generuokite kodą pateikdami variklį ir versiją su šablonu „kodo užklausa su kontekstu“. Tada pašalinkite našumo ir klaidų riziką peržiūrėdami tą patį kodą naudodami šabloną „Kodo aprašymas / peržiūra“. Sukompiliuokite ir patikrinkite kodą variklyje.

kontrolinis sąrašas

  • [ ] Pateikiau variklio, versijos, kalbos ir architektūros kontekstą.
  • [ ] Perskaičiau ir supratau kodą; Norėjau su komentarais.
  • [ ] Aš jį sukūriau ir išbandžiau variklyje bei išmatavau veikimą.
  • [ ] Atlikau saugos patikrą tinkle/ekonomikoje/išsaugoti kodą.
  • [ ] Saugos informaciją naudojau tik savo žaidimui apginti.