Yunit 7 / 11

Pagbuo ng Code at Pagsasama ng Engine: Unity (C#) at Unreal (Blueprint/C++)

Mga nadagdag:

  • Kakayahang gumawa ng maaasahan, compilable na code ng laro mula sa artificial intelligence sa pamamagitan ng pagbibigay ng engine, bersyon, wika at konteksto ng arkitektura at isama ito sa pamamagitan ng pagbabasa at pag-unawa sa code
  • Kakayahang pamahalaan ang pagganap na tukoy sa code ng laro (paglalaan sa bawat frame), lifecycle ng engine, at mga panganib sa hallucination sa pamamagitan ng compilation, pagsubok, at pag-profile
  • Kakayahang ilapat ang prinsipyo ng host-authority sa mga multiplayer na laro at gumamit ng impormasyon sa seguridad nang responsable lamang upang ipagtanggol at i-verify ang sariling laro.

Ang laro ay software; Gaano man ito kahusay na idinisenyo, ito ay ipinatupad gamit ang code. Ang engine ng laro ay ang imprastraktura na nagpapatakbo ng laro: Unity (malawakang ginagamit na engine scripted sa C#) at Unreal Engine (engine na gumagamit ng C++ at ang visual scripting language Blueprint) ay ang dalawang pinaka-karaniwan. Ang AI ay isa sa mga pinaka-mature na tulong sa pagbuo ng code: player controller, inventory system, state machine, save/load, interface logic, debugging at refactoring (refactoring code nang hindi sinisira ang gawi nito). Ngunit ang code ng laro ay may sariling mga pitfalls: performance (frame rate), engine lifecycle, multiplayer security. Sa unit na ito matututunan mo kung paano gamitin ang AI nang ligtas at mahusay sa code ng laro.

Kritikal na prinsipyo: konteksto ng engine at bersyon

Kung hindi alam ng AI kung para saang engine at bersyon ito isinusulat, gagawa ito ng nalilito, hindi na ginagamit, o hindi umiiral na API. Kaya bigyan ang engine, bersyon, wika at arkitektura na konteksto sa bawat code prompt. Ang "Write player movement for Unity" ay mahina; Makapangyarihan ang "Unity 2022.3, C#, bagong Input System, Rigidbody based physics movement." Tukuyin kung gusto mo ng Blueprint o C++ sa Unreal at kung aling bersyon ang iyong ginagamit.

Secure ang daloy ng code nang hakbang-hakbang:

  1. Magbigay ng konteksto (engine, bersyon, wika, kasalukuyang arkitektura, mga hadlang).
  2. Gusto itong maliit at tinukoy (iisang bahagi, hindi ang buong sistema).
  3. Basahin at unawain ang code (unawain kung ano ang ginagawa nito sa bawat linya; huwag maglagay ng code na hindi mo maintindihan).
  4. Bumuo at subukan (patakbuhin sa engine; profile — sukatin ang pagganap).
  5. Refactor at pagsamahin (tugma sa pamantayan ng proyekto).
Tip: Kapag humihingi ng code sa AI, sabihin ang "ipaliwanag gamit ang mga komento". Ang iyong layunin ay maunawaan ang code; Ang paglalagay ng AI code na hindi mo naiintindihan sa isang proyekto ay mag-iipon ng hindi mapapanatili na utang. Humingi din ng code sa maliliit, nasusubok na mga tipak: Sa halip na isang 500-linya na sistema, ang isang 30-50 na bahagi ng linya na gumagawa ng isang tinukoy na trabaho ay parehong madaling i-verify at isama.

Mga bitag na partikular sa code ng laro

Pagganap. Ang code ng laro ay tumatakbo nang 30-60+ beses bawat segundo. Maaaring ilagay ng AI ang mga mamahaling operasyon (paglalaan ng memorya, paghahanap, pagmamanipula ng string) sa Update loop na tumatakbo sa bawat frame; binabawasan nito ang frame rate. I-profile ang mga kritikal na code sa pagganap at bigyan ng AI constraints gaya ng "run on every frame, no allocation."

Ikot ng buhay ng makina. Minsan nalilito ang AI kapag tinawag ang mga espesyal na pamamaraan, gaya ng Awake/Start/Update in Unity, BeginPlay/Tick in Unreal. Mahuli ang mga error sa lifecycle sa pamamagitan ng pagsubok.

Multiplayer na seguridad. Ito ang pinaka kritikal na isyu sa mga tuntunin ng IT/seguridad. Huwag kailanman magtiwala sa kliyente sa multiplayer: ang kliyente sa computer ng manlalaro ay maaaring manipulahin para sa pagdaraya. I-verify ang kritikal na katayuan tulad ng mga puntos, pinsala, pera sa server (server-authoritative). Kontrolin ang network code na nabuo ng AI laban sa prinsipyong ito; Kung ang AI ay lumikha ng isang kahinaan na nagtitiwala sa kliyente, ayusin ito. Gamitin lamang ang impormasyong ito upang ipagtanggol at i-verify ang iyong sariling paglalaro; Ang hindi awtorisadong pag-access o pagdaraya sa server ng ibang tao ay labag sa batas at hindi etikal.

Babala: Maaaring maglaman ng mga kahinaan ang nabuong code ng AI (nawawalang validation ng input, tiwala ng kliyente, pagmamanipula sa pag-save ng file). Huwag bulag na tanggapin ang code; Magsagawa ng pagsusuri sa seguridad, partikular sa network, economics, at save code.

Utang sa arkitektura at pagpapanatili

Mabilis na gumagawa ang AI ng mga indibidwal na function; Ngunit ang arkitektura ng isang laro—kung paano nahahati ang mga system, kung paano sila nakikipag-usap sa isa't isa, kung saan itinatago ang data—ay isang pangmatagalang desisyon, at ito ay pag-aari ng tao. Kung sasabihin mo sa AI ​​na "isulat ang buong imbentaryo, labanan, at i-save ang system nang magkasama" makakakuha ka ng gumagana ngunit mahigpit na pinagsama, mahirap mapanatili, hindi napapalawak na bola ng sinulid. Sa halip, idinisenyo mo ang arkitektura, gumamit ng AI upang i-populate ang maliliit na bahagi na may mga tinukoy na interface. Ang magandang arkitektura ay nagdudulot ng pagbabago habang lumalaki ang laro: ang mga masasamang desisyon ay babalik pagkalipas ng isang taon bilang teknikal na utang na nagpapaantala sa bawat bagong feature.

Ang isa pang pinagmumulan ng utang sa pagpapanatili ay ang code na pumapasok sa proyekto nang hindi naiintindihan. Ang isang sistema na isinulat ng AI ay maaaring gumana ngayon; Ngunit kapag kailangan mong palitan ito pagkalipas ng anim na buwan at walang nakakaalala sa kanilang ginawa, ang utang ay nagiging interes. Iyon ang dahilan kung bakit mahalaga ang dalawang disiplina: pagbabasa at pag-unawa sa code sa oras ng produksyon, at paghingi ng paglilinaw ng mga komento mula sa AI. Bilang panuntunan ng thumb, huwag maglagay ng anumang AI code sa iyong proyekto na hindi mo maaaring muling isulat ang iyong sarili o kahit man lang ipaliwanag ang bawat linya. Ang AI ay nagbibigay ng bilis; Ang iyong disiplina ay nagbibigay ng pagpapanatili.

tatlong mini case

Kaso 1 — Pinigilan ng konteksto ng paglabas ang bug. Isang programmer ang unang nagsabi, "Isulat ang imbentaryo para sa Unity"; ang code ay gumagamit ng lumang API, hindi ito nag-compile. Pagkatapos ay ibinigay nito ang konteksto na "Unity 2022.3, C#, batay sa ScriptableObject"; ang code ay pinagsama-sama sa unang pagkakataon at umaangkop sa proyekto. Ang konteksto ay nag-save ng isang oras ng pag-debug.

Kaso 2 — Bitag sa pagganap. Sa isang laro ay mababa ang frame rate. Kapag nag-profile, nakita na ang isang paraan ng Pag-update na ginawa ng AI ay naglaan ng isang bagong listahan sa bawat frame at naghanap ng mga kaaway. Inayos ang code na may naka-cache na reference at non-quadratic na update, na nagpapataas ng frame rate mula 42 hanggang 60.

Kaso 3 — Nahuli ang kahinaan sa seguridad. Sa isang multiplayer na laro, kinakalkula ng AI-generated code ang pinsala sa kliyente at iniulat ito sa server; ito ay bukas para sa pagdaraya (ang kliyente ay maaaring magdulot ng walang katapusang pinsala). Ang code ay ginawang server-authoritarian (kinakalkula ng server ang pinsala). Pinigilan ng audit ang isang iskandalo ng pagdaraya pagkatapos ng publikasyon.

Apat na maaaring kopyahin na mga template

1) Kahilingan ng code na may konteksto:

Engine: Unity 2022.3. Wika: C#. Arkitektura: [hal. component based].Constraint: Paglalaan sa Update; maging nababasa at nagkomento.Gawain: [single, tinukoy na bahagi, hal. "double jump character controller"]. I-verify na ang bawat API na iyong ginagamit ay nasa bersyong ito; Kung hindi ka sigurado, ipaalam sa akin.

2) Pagpapaliwanag/pagsusuri ng code:

Ipaliwanag ang sumusunod na linya ng code sa bawat linya at isulat ang (1) kung ano ang ginagawa nito, (2) posibleng mga problema sa pagganap (allocation bawat frame, mahal na paghahanap), (3) posibleng mga bug, (4) mga mungkahi para sa pagpapabuti. Code: [i-paste]

3) Multiplayer security audit:

Suriin ang sumusunod na multiplayer code para sa seguridad. Partikular: mga lugar kung saan pinagkakatiwalaan ang kliyente, kritikal na estado na kailangang i-verify sa server (pinsala, puntos, pera), nawawalang pagpapatunay ng input. Magmungkahi ng pag-aayos upang gawing awtoritarian ng server. Ito ay para lang ipagtanggol ang sarili kong laro. Code: [i-paste]

4) Refactor na nakatuon sa profile ng pagganap:

Gumagana ang code na ito sa bawat frame at binabawasan ang frame rate: [code]. Maghanap ng mga alokasyon, mamahaling paghahanap, at hindi kinakailangang mga pagpapatakbo ng frame-by-frame; Mag-optimize nang hindi sinisira ang pag-uugali sa pag-cache at hindi gaanong madalas na pag-update. Ipaliwanag ang mga pagbabago.

Mahinang prompt / Malakas na prompt

Mahinang prompt:

Sumulat ng isang save system sa Unity.

Walang bersyon, format, saklaw ng data, seguridad; Ang resulta ay pangkalahatan at mapanganib.

Napakahusay na prompt:

Engine: Unity 2022.3, C#. Gawain: JSON based save/load system. Upang mai-save: lokasyon ng player, imbentaryo, pag-unlad. Constraint: kumuha ng error management laban sa file corruption; Magdagdag ng integrity check (hash) sa save file upang maiwasan ang pagdaraya sa pamamagitan ng madaling pagpapalit nito ng player. Ikomento ang code at i-verify na ang bawat API ay nasa bersyong ito.

Ang pag-bersyon, saklaw, paghawak ng error, at pagsuri sa integridad ay nagpapatigas sa output.

Talahanayan ng konteksto ng makina/wika

makina

wika

Ano ang kailangan mong ibigay sa AI

espesyal na atensyon

pagkakaisa

C#

Bersyon, Input/physics system

I-update ang alokasyon, lifecycle

hindi totoo

Blueprint

Bersyon, konteksto ng node

Mga limitasyon ng visual na lohika

hindi totoo

C++

Bersyon, istraktura ng module

Memorya, GC, macros

multiplayer

pareho

modelo ng network

Presenter-authoritarianism

Mga karaniwang pagkakamali

  • Hindi tinukoy ang engine/bersyon. Ito ay mula sa luma o gawa-gawang API.
  • Nagtitiwala sa code nang hindi naiintindihan ito. Naiipon ang hindi mapanatili na utang.
  • Hindi sinusukat ang pagganap. Ang paglalaan ng frame-by-frame ay tahimik na binabawasan ang frame rate.
  • Pagtitiwala sa kliyente. Mayroong kahinaan sa pagdaraya sa multiplayer.
  • Gusto ang buong sistema nang sabay-sabay. Ang maliit, masusubok na piraso ay mas ligtas.

Sa buod

Ang AI ay isang makapangyarihang katulong sa code ng laro, ngunit nangangailangan ito ng makina, bersyon, at konteksto ng arkitektura. Huwag ilagay ito sa isang proyekto nang hindi binabasa at nauunawaan ang code, kino-compile at sinusuri ito, at sinusuri ang pagganap at seguridad. Panatilihin ang server-authoritarianism sa multiplayer at gumamit ng impormasyon sa seguridad para sa mga layunin ng pagtatanggol at pag-verify lamang.

Gawain ng aplikasyon

Pumili ng maliit na bahagi (hal. double jump o simpleng imbentaryo). Bumuo ng code sa pamamagitan ng pagbibigay ng engine at bersyon ng template na "kahilingan ng code na may konteksto." Pagkatapos ay alisin ang mga panganib sa pagganap at bug sa pamamagitan ng pagsusuri sa parehong code gamit ang template na "Paglalarawan/pagsusuri ng code." I-compile at subukan ang code sa engine.

checklist

  • [ ] Ibinigay ko ang makina, bersyon, wika at konteksto ng arkitektura.
  • [ ] Binasa at naunawaan ko ang code; Gusto ko ito na may komentaryo.
  • [ ] Pinagsama-sama at sinubukan ko ito sa makina at sinukat ang pagganap.
  • [ ] Gumawa ako ng security check sa network/economy/save code.
  • [ ] Gumamit lang ako ng impormasyon sa seguridad para ipagtanggol ang sarili kong laro.