Unitate 7 / 11

Generarea codului și integrarea motorului: Unity (C#) și Unreal (Blueprint/C++)

Câștiguri:

  • Abilitatea de a produce cod de joc fiabil, compilabil din inteligența artificială, oferind motor, versiune, limbaj și context arhitectural și de a-l integra prin citirea și înțelegerea codului
  • Abilitatea de a gestiona performanța specifică codului de joc (alocare pe cadru), ciclul de viață al motorului și riscurile de halucinație prin compilare, testare și profilare
  • Abilitatea de a aplica principiul autorității gazdă în jocurile multiplayer și de a utiliza informațiile de securitate în mod responsabil doar pentru a apăra și a verifica propriul joc.

Jocul este software; Indiferent cât de bine este proiectat, este implementat cu cod. Motorul de joc este infrastructura care face ca jocul să ruleze: Unity (motor folosit pe scară largă cu script în C#) și Unreal Engine (motor care utilizează C++ și limbajul de scripting vizual Blueprint) sunt cele mai comune. AI este unul dintre cele mai mature ajutoare în generarea codului: controler de jucător, sistem de inventar, mașini de stat, salvare/încărcare, logica interfeței, depanare și refactorizare (refactorizarea codului fără a-i întrerupe comportamentul). Dar codul jocului are propriile capcane: performanță (frecvența cadrelor), ciclul de viață al motorului, securitatea multiplayer. În această unitate veți învăța cum să utilizați AI în siguranță și eficient în codul de joc.

Principiul critic: contextul motorului și al versiunii

Dacă AI nu știe pentru ce motor și versiune scrie, va produce un API confuz, învechit sau inexistent. Deci, oferiți motor, versiune, limbaj și context arhitectural în fiecare prompt de cod. „Scrieți mișcarea jucătorului pentru Unity” este slab; „Unity 2022.3, C#, nou sistem de intrare, mișcare fizică bazată pe corp rigid” este puternic. Specificați dacă doriți Blueprint sau C++ în Unreal și ce versiune utilizați.

Fluxul de cod sigur pas cu pas:

  1. Dați contextul (motor, versiune, limbaj, arhitectură curentă, constrângeri).
  2. Vrei mic și definit (o singură componentă, nu întregul sistem).
  3. Citiți și înțelegeți codul (înțelegeți ce face linie cu linie; nu pune cod pe care nu îl înțelegi).
  4. Construiți și testați (funcționați pe motor; profil - măsurați performanța).
  5. Refactorizarea și integrarea (se potrivește cu standardul proiectului).
Sfat: Când cereți codul AI, spuneți „explicați cu comentarii”. Scopul tău este să înțelegi codul; Introducerea unui cod AI pe care nu îl înțelegeți într-un proiect va acumula datorii de neîntreținut. De asemenea, cereți codul în bucăți mici, testabile: în loc de un sistem de 500 de linii, o componentă de 30-50 de linii care face o singură lucrare definită este atât ușor de verificat, cât și de integrat.

Capcane specifice codului jocului

Performanță. Codul jocului rulează de 30-60 de ori pe secundă. AI poate pune operațiuni costisitoare (alocare de memorie, căutare, manipulare șiruri) în bucla de actualizare care rulează la fiecare cadru; aceasta reduce rata de cadre. Profilați codurile critice de performanță și acordați constrângeri AI, cum ar fi „rulați pe fiecare cadru, fără alocare”.

Ciclul de viață al motorului. AI uneori derutează atunci când sunt apelate metode speciale, cum ar fi Awake/Start/Update în Unity, BeginPlay/Tick în Unreal. Detectați erorile ciclului de viață prin testare.

Securitate multiplayer. Aceasta este cea mai critică problemă în ceea ce privește IT/securitatea. Nu aveți încredere niciodată în client în multiplayer: clientul de pe computerul jucătorului poate fi manipulat pentru a înșela. Verificați starea critică, cum ar fi puncte, daune, bani pe server (autoritar pentru server). Controlați codul de rețea generat de AI împotriva acestui principiu; Dacă AI a creat o vulnerabilitate de încredere în client, remediați-o. Folosiți aceste informații numai pentru a vă apăra și verifica propriul joc; Accesul neautorizat la sau înșelarea pe serverul altcuiva este ilegal și lipsit de etică.

Atenție: Codul generat de AI poate conține vulnerabilități (validarea intrării lipsă, încrederea clientului, manipularea fișierului de salvare). Nu accepta orbește codul; Efectuați o analiză de securitate, în special a rețelei, a economiei și salvați codul.

Datorii de arhitectura si intretinere

AI produce rapid funcții individuale; Dar arhitectura unui joc – cum sunt împărțite sistemele, cum vorbesc între ele, unde sunt păstrate datele – este o decizie pe termen lung și aparține omului. Dacă îi spui AI „să scrie întregul inventar, să lupte și să salveze împreună”, obții un fir de fire funcțional, dar strâns cuplat, greu de întreținut, neextensibil. În schimb, proiectați arhitectura, utilizați AI pentru a popula componente mici cu interfețe definite. Arhitectura bună face diferența pe măsură ce jocul crește: deciziile proaste revin un an mai târziu ca datorii tehnice care întârzie fiecare caracteristică nouă.

O altă sursă de datorie de întreținere este codul care intră în proiect fără a fi înțeles. Un sistem scris de AI ar putea funcționa astăzi; Dar când trebuie să-l înlocuiești șase luni mai târziu și nimeni nu-și amintește ce a făcut, datoria se transformă în dobândă. De aceea, două discipline sunt esențiale: citirea și înțelegerea codului în timpul producției și solicitarea de comentarii clarificatoare din partea AI. Ca regulă generală, nu introduceți niciun cod AI în proiectul dvs. pe care să nu îl puteți rescrie sau cel puțin să explicați rând cu rând. AI dă viteză; Disciplina ta dă durabilitate.

trei mini cutii

Cazul 1 — Contextul de lansare a prevenit eroarea. Un programator a spus mai întâi: „Scrieți inventarul pentru Unity”; codul folosea un API vechi, nu a fost compilat. Apoi a dat contextul „Unity 2022.3, C#, based on ScriptableObject”; codul compilat prima dată și se potrivește proiectului. Contextul a salvat o oră de depanare.

Cazul 2 — Capcană de performanță. Într-un joc, rata de cadre a fost scăzută. La profilare, s-a văzut că o metodă de actualizare produsă de AI a alocat o nouă listă în fiecare cadru și a căutat inamici. S-a remediat codul cu referință în cache și actualizare non-quadratică, crescând rata de cadre de la 42 la 60.

Cazul 3 – Vulnerabilitatea de securitate prinsă. Într-un joc multiplayer, codul generat de AI a calculat daunele asupra clientului și a raportat-o ​​serverului; aceasta era deschisă pentru înșelăciune (clientul putea provoca daune infinite). Codul a fost făcut server-autoritar (serverul calculează daune). Auditul a prevenit un scandal de înșelăciune post-publicare.

Patru șabloane copiabile

1) Cerere de cod cu context:

Motor: Unity 2022.3. Limba: C#. Arhitectură: [de ex. bazat pe componente].Constraint: Alocare în Actualizare; să fie lizibil și comentat. Sarcină: [componentă unică, definită, de ex. „controler de caractere cu dublu salt”]. Verificați dacă fiecare API pe care îl utilizați este în această versiune; Dacă nu ești sigur, anunță-mă.

2) Explicația/revizuirea codului:

Explicați următorul cod linie cu linie și scrieți (1) ce face, (2) posibile probleme de performanță (alocare pe cadru, căutare costisitoare), (3) posibile erori, (4) sugestii de îmbunătățire.Cod: [paste]

3) Audit de securitate multiplayer:

Examinați următorul cod multiplayer pentru securitate. Mai exact: locuri în care clientul este de încredere, stare critică care trebuie verificată pe server (daune, puncte, bani), lipsă validarea intrărilor. Sugerez o remediere pentru a face serverul-autoritar. Acesta este doar pentru a-mi apăra propriul joc. Cod: [paste]

4) Refactor concentrat pe profilul de performanță:

Acest cod rulează pe fiecare cadru și reduce rata de cadre: [cod]. Găsiți alocări, căutări costisitoare și operațiuni inutile cadru cu cadru; Optimizați fără a întrerupe comportamentul cu memorarea în cache și actualizări mai puțin frecvente. Explicați modificările.

Prompt slab / Prompt puternic

Prompt slab:

Scrieți un sistem de salvare în Unity.

Fără versiune, format, domeniul de aplicare al datelor, securitate; Rezultatul este general și riscant.

Solicitare puternică:

Motor: Unity 2022.3, C#. Sarcină: sistem de salvare/încărcare bazat pe JSON. De salvat: locația jucătorului, inventarul, progresul. Constrângere: obțineți gestionarea erorilor împotriva corupției fișierelor; Adăugați o verificare a integrității (hash) la fișierul de salvare pentru a preveni înșelăciunea prin schimbarea cu ușurință a acestuia de către jucător. Comentați codul și verificați dacă fiecare API este la această versiune.

Versiunile, domeniul de aplicare, gestionarea erorilor și verificarea integrității întăresc rezultatul.

Tabel de context motor/limbaj

motor

limbaj

Ce trebuie să oferi AI

atenție deosebită

unitate

C#

Versiune, sistem de intrare/fizică

Actualizați alocarea, ciclul de viață

ireal

Planul

Versiunea, contextul nodului

Limite logice vizuale

ireal

C++

Versiune, structura modulului

Memorie, GC, macrocomenzi

multiplayer

ambele

model de rețea

Prezentator-autoritarism

Greșeli comune

  • Nu se specifică motorul/versiunea. Vine dintr-un API învechit sau inventat.
  • Aveți încredere în cod fără a-l înțelege. Se acumulează datorii care nu pot fi susținute.
  • Nu măsoară performanța. Alocarea cadru cu cadru reduce silențios rata de cadre.
  • A avea încredere în client. Există o vulnerabilitate de înșelăciune în multiplayer.
  • Dorind întregul sistem deodată. Piesa mică, testabilă este mai sigură.

Pe scurt

AI este un ajutor puternic în codul jocului, dar necesită motor, versiune și context arhitectural. Nu îl puneți într-un proiect fără să citiți și să înțelegeți codul, să îl compilați și să îl testați și să verificați performanța și securitatea. Mențineți autoritarismul serverului în multiplayer și utilizați informațiile de securitate numai în scopuri defensive și de verificare.

Sarcina de aplicare

Alegeți o componentă mică (de exemplu, salt dublu sau inventar simplu). Generați codul furnizând motor și versiune cu șablonul „cerere de cod cu context”. Apoi, eliminați riscurile de performanță și erori, revizuind același cod cu șablonul „Descriere/revizuire a codului”. Compilați și testați codul în motor.

lista de verificare

  • [ ] Am dat motorul, versiunea, limbajul și contextul arhitecturii.
  • [ ] Am citit și am înțeles codul; Am vrut-o cu comentarii.
  • [ ] L-am compilat și testat în motor și am măsurat performanța.
  • [ ] Am efectuat o verificare de securitate în codul de rețea/economie/salvare.
  • [ ] Am folosit informații de securitate doar pentru a-mi apăra propriul joc.