Vienība 7 / 11

Kodu ģenerēšana un dzinēja integrācija: Unity (C#) un Unreal (Blueprint/C++)

Ieguvumi:

  • Spēja izveidot uzticamu, kompilējamu spēles kodu no mākslīgā intelekta, piešķirot dzinēju, versiju, valodu un arhitektūras kontekstu, un integrēt to, lasot un izprotot kodu
  • Spēja pārvaldīt spēles koda veiktspēju (piešķiršana uz kadru), dzinēja dzīves ciklu un halucināciju riskus, izmantojot kompilāciju, testēšanu un profilēšanu
  • Spēja pielietot saimnieka-autoritātes principu vairāku spēlētāju spēlēs un atbildīgi izmantot drošības informāciju tikai savas spēles aizstāvēšanai un pārbaudei.

Spēle ir programmatūra; Neatkarīgi no tā, cik labi tas ir izstrādāts, tas tiek īstenots ar kodu. Spēles dzinējs ir infrastruktūra, kas nodrošina spēles darbību: Unity (plaši izmantots dzinējs, kas skripts C# valodā) un Unreal Engine (dzinējs, kas izmanto C++ un vizuālo skriptu valodu Blueprint) ir divi visizplatītākie. AI ir viens no nobriedušākajiem palīglīdzekļiem kodu ģenerēšanā: atskaņotāja kontrolieris, inventāra sistēma, stāvokļa mašīnas, saglabāšana/ielādēšana, interfeisa loģika, atkļūdošana un pārstrukturēšana (koda pārveidošana, nepārkāpjot tā uzvedību). Taču spēles kodam ir savas nepilnības: veiktspēja (kadru ātrums), dzinēja dzīves cikls, vairāku spēlētāju drošība. Šajā nodaļā jūs uzzināsit, kā droši un efektīvi izmantot AI spēles kodā.

Kritiskais princips: dzinēja un versijas konteksts

Ja AI nezina, kuram dzinējam un versijai tas raksta, tas radīs neskaidru, novecojušu vai neeksistējošu API. Tāpēc katrā koda uzvednē norādiet dzinēja, versijas, valodas un arhitektūras kontekstu. "Rakstīt spēlētāju kustību Vienotībai" ir vāja; "Unity 2022.3, C#, jauna ievades sistēma, uz cietā korpusa balstīta fizikas kustība" ir spēcīga. Norādiet, vai programmā Unreal vēlaties Blueprint vai C++ un kuru versiju izmantojat.

Soli pa solim droša koda plūsma:

  1. Norādiet kontekstu (dzinējs, versija, valoda, pašreizējā arhitektūra, ierobežojumi).
  2. Vēlaties, lai tas būtu mazs un definēts (viens komponents, nevis visa sistēma).
  3. Izlasiet un saprotiet kodu (saprotiet, ko tas dara, rindiņu pa rindiņai; nelieciet kodu, kuru nesaprotat).
  4. Izveidojiet un pārbaudiet (darbiniet ar dzinēju; profils — izmērīt veiktspēju).
  5. Refaktorēt un integrēt (atbilst projekta standartam).
Padoms. Pieprasot AI kodu, sakiet "skaidrojiet ar komentāriem". Jūsu mērķis ir saprast kodu; Ievietojot projektā nesaprotamu mākslīgā intelekta kodu, tiks uzkrāts nesaglabājams parāds. Pieprasiet arī kodu mazās, pārbaudāmās daļās: 500 rindu sistēmas vietā 30–50 rindu komponentu, kas veic vienu noteiktu darbu, ir viegli pārbaudīt un integrēt.

Slazdi, kas raksturīgi spēles kodam

Performance. Spēles kods darbojas 30-60+ reizes sekundē. AI var ievietot dārgas darbības (atmiņas piešķiršana, uzmeklēšana, manipulācijas ar virknēm) atjaunināšanas cilpā, kas darbojas katrā kadrā; tas samazina kadru ātrumu. Profilējiet veiktspējai kritiskos kodus un norādiet AI ierobežojumus, piemēram, "darbiniet katrā kadrā, bez piešķiršanas".

Dzinēja dzīves cikls. AI dažreiz mulsina, kad tiek izsauktas īpašas metodes, piemēram, Awake/Start/Update in Unity, BeginPlay/Tick in Unreal. Pārbaudiet dzīves cikla kļūdas.

Vairāku spēlētāju drošība. Tas ir vissvarīgākais IT/drošības jautājums. Nekad neuzticieties klientam vairāku spēlētāju spēlē: ar klientu spēlētāja datorā var manipulēt, lai krāptu. Pārbaudiet kritisko statusu, piemēram, punktus, bojājumus, naudu serverī (serveris-autoritatīvs). Kontrolējiet AI ģenerēto tīkla kodu saskaņā ar šo principu; Ja AI ir izveidojis klientam uzticamu ievainojamību, izlabojiet to. Izmantojiet šo informāciju tikai, lai aizstāvētu un pārbaudītu savu spēli; Neatļauta piekļuve kāda cita serverim vai krāpšanās tajā ir nelikumīga un neētiska.

Uzmanību: AI ģenerētajā kodā var būt ievainojamības (trūkst ievades validācijas, klienta uzticēšanās, saglabāšanas faila manipulācijas). Akli nepieņemiet kodu; Veiciet drošības pārbaudi, jo īpaši attiecībā uz tīklu, ekonomiku un saglabājiet kodu.

Arhitektūras un uzturēšanas parāds

AI ātri rada atsevišķas funkcijas; Taču spēles arhitektūra — kā sistēmas tiek sadalītas, kā tās runā savā starpā, kur tiek glabāti dati — ir ilgtermiņa lēmums, un tas pieder cilvēkam. Ja jūs sakāt AI "uzrakstīt visu inventāru, apkarot un saglabāt sistēmu kopā", jūs iegūsit funkcionējošu, bet cieši savienotu, grūti kopjamu, nepaplašināmu dzijas kamoli. Tā vietā jūs izstrādājat arhitektūru, izmantojiet AI, lai aizpildītu mazus komponentus ar noteiktām saskarnēm. Laba arhitektūra maina spēles attīstību: slikti lēmumi atgriežas gadu vēlāk kā tehnisks parāds, kas aizkavē katru jaunu funkciju.

Vēl viens uzturlīdzekļu parādu avots ir kods, kas nonāk projektā, to nesaprotot. AI rakstīta sistēma varētu darboties šodien; Bet, kad pēc pusgada tas jānomaina un neviens neatceras, ko darījis, parāds pārvēršas procentos. Tāpēc būtiskas ir divas disciplīnas: koda lasīšana un izpratne ražošanas laikā, kā arī skaidrojošu komentāru pieprasīšana no AI. Parasti nelieciet savā projektā AI kodu, ko nevarat pārrakstīt pats vai vismaz izskaidrot rindiņu pa rindiņai. AI dod ātrumu; Jūsu disciplīna nodrošina ilgtspējību.

trīs mini futrāļi

1. gadījums — laidiena konteksts novērsa kļūdu. Programmētājs vispirms teica: "Uzrakstiet inventāru Vienotībai"; kods izmantoja vecu API, tas netika kompilēts. Tad tas deva kontekstu "Unity 2022.3, C#, pamatojoties uz ScriptableObject"; kods tika apkopots pirmo reizi un atbilst projektam. Konteksts ietaupīja stundu atkļūdošanas.

2. gadījums — veiktspējas slazds. Vienā spēlē kadru ātrums bija zems. Profilējot tika konstatēts, ka AI radītā atjaunināšanas metode katrā kadrā iedalīja jaunu sarakstu un meklēja ienaidniekus. Izlabots kods ar kešatmiņā saglabāto atsauci un nekvadrātisku atjauninājumu, palielinot kadru ātrumu no 42 uz 60.

3. gadījums — konstatēta drošības ievainojamība. Vairāku spēlētāju spēlē AI ģenerētais kods aprēķināja klienta bojājumus un ziņoja par to serverim; tas bija atvērts krāpšanai (klients varēja nodarīt bezgalīgu kaitējumu). Kods ir padarīts servera autoritārs (serveris aprēķina bojājumus). Revīzija novērsa krāpšanās skandālu pēc publikācijas.

Četras kopējamas veidnes

1) Koda pieprasījums ar kontekstu:

Dzinējs: Unity 2022.3. Valoda: C#. Arhitektūra: [piem. Component based].Ierobežojums: piešķiršana atjauninājumā; būt lasāmam un komentējamam.Uzdevums: [viens, definēts komponents, piem. "dubultlēkšanas rakstzīmju kontrolieris"]. Pārbaudiet, vai katrai jūsu izmantotajai API ir šī versija; Ja neesat pārliecināts, dariet to man zināmu.

2) Koda skaidrojums/pārskats:

Izskaidrojiet šo kodu pēc rindiņas un ierakstiet (1) ko tas dara, (2) iespējamās veiktspējas problēmas (piešķiršana uz kadru, dārga meklēšana), (3) iespējamās kļūdas, (4) uzlabojumu ieteikumi.Kods: [ielīmēt]

3) Vairāku spēlētāju drošības audits:

Drošības nolūkos pārbaudiet tālāk norādīto vairāku spēlētāju kodu. Konkrēti: vietas, kur klientam uzticas, kritisks stāvoklis, kas jāpārbauda serverī (bojājumi, punkti, nauda), trūkst ievades validācijas. Ieteikt labojumu, lai padarītu serveri autoritāru. Tas ir tikai tāpēc, lai aizstāvētu savu spēli. Kods: [ielīmēt]

4) Uz veiktspējas profilu vērsts faktors:

Šis kods darbojas katrā kadrā un samazina kadru ātrumu: [kods]. Atrodiet piešķīrumus, dārgus meklējumus un nevajadzīgas darbības pa vienam kadram; Optimizējiet, nepārkāpjot darbību, izmantojot kešatmiņu un retākus atjauninājumus. Izskaidrojiet izmaiņas.

Vāja uzvedne / spēcīga uzvedne

Vāja uzvedne:

Uzrakstiet saglabāšanas sistēmu Unity.

Nav versijas, formāta, datu apjoma, drošības; Rezultāts ir vispārīgs un riskants.

Spēcīga uzvedne:

Dzinējs: Unity 2022.3, C#. Uzdevums: JSON balstīta saglabāšanas/ielādēšanas sistēma. Jāsaglabā: spēlētāja atrašanās vieta, inventārs, progress. Ierobežojums: iegūt kļūdu pārvaldību pret failu bojājumiem; Pievienojiet saglabāšanas failam integritātes pārbaudi (jaucēju), lai novērstu krāpšanos, atskaņotājam to viegli mainot. Komentējiet kodu un pārbaudiet, vai katra API ir šajā versijā.

Versiju noteikšana, darbības joma, kļūdu apstrāde un integritātes pārbaude nostiprina izvadi.

Dzinēja/valodas konteksta tabula

dzinējs

valodu

Kas jums ir jāsniedz AI

īpašu uzmanību

vienotību

C#

Versija, ievades/fizikas sistēma

Atjaunināt sadalījumu, dzīves ciklu

nereāls

Projekts

Versija, mezgla konteksts

Vizuālās loģikas robežas

nereāls

C++

Versija, moduļa struktūra

Atmiņa, GC, makro

vairāku spēlētāju spēle

gan

tīkla modelis

Prezentētājs-autoritārisms

Biežas kļūdas

  • Nav norādīts dzinējs/versija. Tas nāk no novecojušas vai izdomātas API.
  • Uzticoties kodam, to nesaprotot. Krājas nesaglabājami parādi.
  • Nav veiktspējas mērīšana. Kadru pa kadram piešķiršana klusi samazina kadru ātrumu.
  • Uzticoties klientam. Vairāku spēlētāju spēlē ir krāpšanās ievainojamība.
  • Gribas visu sistēmu uzreiz. Mazs, pārbaudāms gabals ir drošāks.

Rezumējot

AI ir spēcīgs palīgs spēles kodā, taču tam ir nepieciešams dzinējs, versija un arhitektūras konteksts. Neievietojiet to projektā, neizlasot un neizprotot kodu, apkopojot un nepārbaudot to, kā arī nepārbaudot veiktspēju un drošību. Saglabājiet servera autoritārismu vairāku spēlētāju spēlē un izmantojiet drošības informāciju tikai aizsardzības un pārbaudes nolūkos.

Lietojumprogrammas uzdevums

Izvēlieties nelielu komponentu (piemēram, dubulto lēcienu vai vienkāršu inventāru). Ģenerējiet kodu, nodrošinot dzinēju un versiju ar veidni "koda pieprasījums ar kontekstu". Pēc tam noņemiet veiktspējas un kļūdu riskus, pārskatot to pašu kodu, izmantojot veidni "Koda apraksts/pārskatīšana". Apkopojiet un pārbaudiet kodu dzinējā.

kontrolsaraksts

  • [ ] Es norādīju dzinēju, versiju, valodu un arhitektūras kontekstu.
  • [ ] Es izlasīju un sapratu kodu; Es gribēju to ar komentāriem.
  • [ ] Es to apkopoju un pārbaudīju dzinējā un izmērīju veiktspēju.
  • [ ] Es veicu drošības pārbaudi tīklā/ekonomikas/saglabāšanas kodā.
  • [ ] Drošības informāciju izmantoju tikai, lai aizstāvētu savu spēli.