Enhet 7 / 11

Kodgenerering och motorintegration: Unity (C#) och Unreal (Blueprint/C++)

Vinster:

  • Förmåga att producera pålitlig, kompilerbar spelkod från artificiell intelligens genom att ge motor, version, språk och arkitektoniskt sammanhang och integrera den genom att läsa och förstå koden
  • Förmåga att hantera spelkodspecifik prestanda (tilldelning per bildruta), motorlivscykel och hallucinationsrisker genom kompilering, testning och profilering
  • Förmåga att tillämpa principen om värdbehörighet i spel för flera spelare och använda säkerhetsinformation på ett ansvarsfullt sätt endast för att försvara och verifiera sitt eget spel.

Spelet är mjukvara; Oavsett hur väl den är designad är den implementerad med kod. Spelmotorn är infrastrukturen som gör att spelet körs: Unity (flitigt använd motor skriptad i C#) och Unreal Engine (motor som använder C++ och det visuella skriptspråket Blueprint) är de två vanligaste. AI är ett av de mest mogna hjälpmedlen inom kodgenerering: spelarkontroller, inventeringssystem, tillståndsmaskiner, spara/ladda, gränssnittslogik, felsökning och refaktorering (refaktorering av kod utan att bryta dess beteende). Men spelkoden har sina egna fallgropar: prestanda (bildhastighet), motorns livscykel, säkerhet för flera spelare. I den här enheten kommer du att lära dig hur du använder AI säkert och effektivt i spelkod.

Kritisk princip: motor- och versionskontext

Om AI:n inte vet vilken motor och version den skriver för, kommer den att producera ett förvirrat, föråldrat eller obefintligt API. Så ge motor, version, språk och arkitektur sammanhang i varje kodprompt. "Skriv spelarrörelse för Unity" är svag; "Unity 2022.3, C#, nytt indatasystem, rigidbody-baserad fysikrörelse" är kraftfullt. Ange om du vill ha Blueprint eller C++ i Unreal och vilken version du använder.

Säkert kodflöde steg för steg:

  1. Ge sammanhang (motor, version, språk, aktuell arkitektur, begränsningar).
  2. Vill ha den liten och definierad (en komponent, inte hela systemet).
  3. Läs och förstå koden (förstå vad den gör rad för rad; lägg inte kod du inte förstår).
  4. Bygg och testa (kör på motor; profil – mät prestanda).
  5. Refaktorera och integrera (matcha projektstandard).
Tips: När du ber AI om kod, säg "förklara med kommentarer". Ditt mål är att förstå koden; Att lägga in AI-kod som du inte förstår i ett projekt kommer att ackumulera ohållbar skuld. Be också om kod i små, testbara bitar: Istället för ett 500-rads system är en 30-50 rader komponent som gör ett enda definierat jobb både lätt att verifiera och integrera.

Fällor som är specifika för spelkoden

Prestanda. Spelkoden körs 30-60+ gånger per sekund. AI kan lägga dyra operationer (minnestilldelning, uppslagning, strängmanipulation) i uppdateringsslingan som körs vid varje bildruta; detta minskar bildfrekvensen. Profilera prestandakritiska koder och ge AI-begränsningar som "kör på varje bildruta, ingen allokering".

Motorns livscykel. AI förvirrar ibland när speciella metoder anropas, som Awake/Start/Update in Unity, BeginPlay/Tick in Unreal. Fånga livscykelfel genom att testa.

Säkerhet för flera spelare. Detta är den mest kritiska frågan vad gäller IT/säkerhet. Lita aldrig på klienten i multiplayer: klienten på spelarens dator kan manipuleras för fusk. Verifiera kritisk status som poäng, skada, pengar på servern (serverauktoritativ). Styr nätverkskoden som genereras av AI mot denna princip; Om AI har skapat en klienttillförlitlig sårbarhet, fixa den. Använd denna information endast för att försvara och verifiera ditt eget spel; Obehörig åtkomst till eller fusk på någon annans server är olagligt och oetiskt.

Varning: AI-genererad kod kan innehålla sårbarheter (saknad indatavalidering, klientförtroende, manipulering av sparafil). Acceptera inte koden blint; Utför en säkerhetsgranskning, särskilt av nätverket, ekonomi och spara kod.

Arkitekt- och underhållsskuld

AI producerar individuella funktioner snabbt; Men ett spels arkitektur – hur system är uppdelade, hur de pratar med varandra, var data förvaras – är ett långsiktigt beslut, och det tillhör människan. Om du säger åt AI:n att "skriva hela inventeringen, bekämpa och spara systemet tillsammans" får du ett fungerande men tätt sammankopplat, svårtillgängligt, icke-expanderbart garnnystan. Istället designar du arkitekturen, använder AI för att fylla små komponenter med definierade gränssnitt. Bra arkitektur gör skillnad när spelet växer: dåliga beslut kommer tillbaka ett år senare som tekniska skulder som försenar varje ny funktion.

En annan källa till underhållsskuld är kod som kommer in i projektet utan att förstås. Ett system skrivet av AI skulle kunna fungera idag; Men när man ska byta ut den ett halvår senare och ingen kommer ihåg vad de gjorde, övergår skulden till ränta. Det är därför två discipliner är viktiga: att läsa och förstå koden vid produktionstid och att be om förtydligande kommentarer från AI. Som en tumregel, lägg inte in någon AI-kod i ditt projekt som du inte kan skriva om själv eller åtminstone förklara rad för rad. AI ger hastighet; Din disciplin ger hållbarhet.

tre minifodral

Fall 1 – Releasekontext förhindrade buggen. En programmerare sa först, "Skriv inventering för Unity"; koden använde ett gammalt API, det kompilerades inte. Sedan gav det sammanhanget "Unity 2022.3, C#, baserat på ScriptableObject"; koden kompilerades första gången och passade projektet. Kontexten sparade en timmes felsökning.

Fall 2 — Prestationsfälla. I ett spel var bildfrekvensen låg. Vid profilering sågs det att en uppdateringsmetod producerad av AI tilldelade en ny lista i varje ram och sökte efter fiender. Fixade koden med cachad referens och icke-kvadratisk uppdatering, ökade bildfrekvensen från 42 till 60.

Fall 3 — Säkerhetssårbarhet fångad. I ett multiplayer-spel beräknade den AI-genererade koden skadan på klienten och rapporterade den till servern; detta var öppet för fusk (klienten kunde orsaka oändlig skada). Koden har gjorts serverauktoritär (servern beräknar skadan). Revisionen förhindrade en fuskskandal efter publiceringen.

Fyra kopierbara mallar

1) Kodbegäran med sammanhang:

Motor: Unity 2022.3. Språk: C#. Arkitektur: [t.ex. komponentbaserad].Constraint: Allokering i uppdatering; vara läsbar och kommenterad.Uppgift: [enkel, definierad komponent, t.ex. "dubbelhoppteckenkontroller"]. Verifiera att varje API du använder finns i den här versionen; Om du inte är säker, låt mig veta.

2) Kodförklaring/granskning:

Förklara följande kod rad för rad och skriv (1) vad den gör, (2) möjliga prestandaproblem (tilldelning per ram, dyr sökning), (3) möjliga buggar, (4) förslag till förbättringar. Kod: [klistra in]

3) Säkerhetsgranskning för flera spelare:

Undersök följande flerspelarkod för säkerhet. Specifikt: platser där klienten är betrodd, kritiskt tillstånd som måste verifieras på servern (skador, poäng, pengar), saknad indatavalidering. Föreslå fix för att göra server-auktoritär. Detta är bara för att försvara mitt eget spel. Kod: [klistra in]

4) Prestandaprofil fokuserad refactor:

Den här koden körs på varje bildruta och minskar bildrutehastigheten: [kod]. Hitta tilldelningar, dyra sökningar och onödiga bildruta-för-bildruta-operationer; Optimera utan att störa beteendet med cachelagring och mindre frekventa uppdateringar. Förklara ändringarna.

Svag prompt / Stark prompt

Svag uppmaning:

Skriv ett sparasystem i Unity.

Ingen version, format, dataomfång, säkerhet; Resultatet är generellt och riskabelt.

Kraftfull uppmaning:

Motor: Unity 2022.3, C#. Uppgift: JSON-baserat spara/ladda system. Ska sparas: spelarens plats, lager, framsteg. Begränsning: få felhantering mot filkorruption; Lägg till en integritetskontroll (hash) i sparfilen för att förhindra fusk genom att enkelt ändra den av spelaren. Kommentera ut koden och verifiera att varje API har den här versionen.

Versionering, omfattning, felhantering och integritetskontroll förstärker resultatet.

Kontexttabell för motor/språk

motor

språk

Vad du har att ge till AI

särskild uppmärksamhet

enhet

C#

Version, Input/fysiksystem

Uppdateringstilldelning, livscykel

overkligt

Ritning

Version, nodkontext

Visuell logik gränser

overkligt

C++

Version, modulstruktur

Minne, GC, makron

multiplayer

båda

nätverksmodell

Presentatör-auktoritärism

Vanliga misstag

  • Specificerar inte motor/version. Det kommer från föråldrade eller påhittade API.
  • Litar på kod utan att förstå den. Ohållbar skuld ackumuleras.
  • Mäter inte prestanda. Bildruta-för-bildruta-allokering minskar bildhastigheten tyst.
  • Att lita på kunden. Det finns en sårbarhet för fusk i multiplayer.
  • Vill ha hela systemet på en gång. Liten, testbar bit är säkrare.

Sammanfattningsvis

AI är en kraftfull hjälpare i spelkod, men det kräver motor, version och arkitektoniskt sammanhang. Lägg inte in det i ett projekt utan att läsa och förstå koden, kompilera och testa den och kontrollera prestanda och säkerhet. Upprätthåll server-auktoritärism i multiplayer och använd säkerhetsinformation endast i försvars- och verifieringssyfte.

Applikationsuppgift

Välj en liten komponent (t.ex. dubbelhopp eller enkel inventering). Generera kod genom att tillhandahålla motor och version med mallen "kodförfrågan med sammanhang". Ta sedan bort prestanda och buggarisker genom att låta granska samma kod med mallen "Kodbeskrivning/granskning". Kompilera och testa koden i motorn.

checklista

  • [ ] Jag gav motor, version, språk och arkitektur sammanhang.
  • [ ] Jag läste och förstod koden; Jag ville ha det med kommentarer.
  • [ ] Jag kompilerade och testade den i motorn och mätte prestandan.
  • [ ] Jag gjorde en säkerhetskontroll i koden för nätverk/ekonomi/spara.
  • [ ] Jag använde bara säkerhetsinformation för att försvara mitt eget spel.