Zyski:
- Umiejętność tworzenia niezawodnego, kompilowalnego kodu gry na podstawie sztucznej inteligencji poprzez podanie silnika, wersji, języka i kontekstu architektonicznego oraz integrowania go poprzez czytanie i zrozumienie kodu
- Możliwość zarządzania wydajnością związaną z kodem gry (przydziałem na klatkę), cyklem życia silnika i ryzykiem halucynacji poprzez kompilację, testowanie i profilowanie
- Umiejętność stosowania zasady władzy hosta w grach wieloosobowych i odpowiedzialnego wykorzystywania informacji bezpieczeństwa wyłącznie w celu obrony i weryfikacji własnej gry.
Gra jest oprogramowaniem; Nieważne, jak dobrze jest zaprojektowany, jest zaimplementowany za pomocą kodu. Silnik gry to infrastruktura, która umożliwia działanie gry: Unity (powszechnie używany silnik napisany w języku C#) i Unreal Engine (silnik korzystający z C++ i wizualnego języka skryptowego Blueprint) to dwa najpopularniejsze. Sztuczna inteligencja to jedna z najbardziej dojrzałych pomocy w generowaniu kodu: kontroler odtwarzacza, system inwentarza, maszyny stanowe, zapisywanie/ładowanie, logika interfejsu, debugowanie i refaktoryzacja (refaktoryzacja kodu bez zakłócania jego zachowania). Jednak kod gry ma swoje pułapki: wydajność (liczba klatek na sekundę), cykl życia silnika, bezpieczeństwo dla wielu graczy. W tej części dowiesz się, jak bezpiecznie i efektywnie wykorzystywać sztuczną inteligencję w kodzie gry.
Zasada krytyczna: kontekst silnika i wersji
Jeśli sztuczna inteligencja nie wie, dla jakiego silnika i wersji pisze, wygeneruje zagmatwany, przestarzały lub nieistniejący interfejs API. Dlatego w każdym wierszu kodu podaj kontekst silnika, wersji, języka i architektury. „Napisz ruch gracza dla Unity” jest słaby; „Unity 2022.3, C#, nowy system wejściowy, ruch oparty na fizyce Rigidbody” ma potężną moc. Określ, czy chcesz Blueprint czy C++ w Unreal i jakiej wersji używasz.
Bezpieczny przepływ kodu krok po kroku:
- Podaj kontekst (silnik, wersja, język, aktualna architektura, ograniczenia).
- Chcesz, żeby był mały i zdefiniowany (pojedynczy komponent, a nie cały system).
- Przeczytaj i zrozum kod (zrozum, co robi linia po linii; nie umieszczaj kodu, którego nie rozumiesz).
- Kompiluj i testuj (uruchom na silniku; profil — mierz wydajność).
- Refaktoryzuj i integruj (dopasuj do standardów projektu).
Wskazówka: prosząc sztuczną inteligencję o kod, powiedz „wyjaśnij komentarzami”. Twoim celem jest zrozumienie kodu; Umieszczenie w projekcie kodu AI, którego nie rozumiesz, spowoduje nagromadzenie długu nie do utrzymania. Poproś także o kod w małych, testowalnych fragmentach: zamiast systemu o 500 liniach łatwo jest zweryfikować i zintegrować komponent składający się z 30–50 linii, który wykonuje jedno zdefiniowane zadanie.
Pułapki specyficzne dla kodu gry
Wydajność. Kod gry działa ponad 30–60 razy na sekundę. Sztuczna inteligencja może umieszczać kosztowne operacje (alokacja pamięci, wyszukiwanie, manipulowanie ciągami znaków) w pętli aktualizacji uruchamianej w każdej klatce; zmniejsza to liczbę klatek na sekundę. Profiluj kody krytyczne dla wydajności i nadawaj ograniczenia AI, takie jak „działaj w każdej ramce, bez alokacji”.
Cykl życia silnika. Sztuczna inteligencja czasami myli się, gdy wywoływane są specjalne metody, takie jak Awake/Start/Update w Unity, BeginPlay/Tick w Unreal. Wychwytuj błędy cyklu życia poprzez testowanie.
Bezpieczeństwo dla wielu graczy. Jest to najbardziej krytyczna kwestia z punktu widzenia IT/bezpieczeństwa. Nigdy nie ufaj klientowi w grze wieloosobowej: klientem na komputerze gracza można manipulować w celu oszukiwania. Sprawdź stan krytyczny, taki jak punkty, uszkodzenia, pieniądze na serwerze (autorytatywny dla serwera). Kontroluj kod sieciowy generowany przez sztuczną inteligencję zgodnie z tą zasadą; Jeśli sztuczna inteligencja stworzyła lukę w zabezpieczeniach ufającą klientowi, napraw ją. Używaj tych informacji wyłącznie do obrony i weryfikacji własnej gry; Nieautoryzowany dostęp lub oszukiwanie na cudzym serwerze jest nielegalne i nieetyczne.
Uwaga: kod wygenerowany przez sztuczną inteligencję może zawierać luki w zabezpieczeniach (brak sprawdzania poprawności danych wejściowych, zaufanie klienta, manipulacja zapisywaniem plików). Nie akceptuj kodu na ślepo; Przeprowadź przegląd bezpieczeństwa, szczególnie sieci, ekonomii i zapisz kod.
Dług architektoniczny i konserwacyjny
AI szybko tworzy indywidualne funkcje; Jednak architektura gry – sposób podziału systemów, sposób komunikowania się ze sobą, miejsce przechowywania danych – to decyzja długoterminowa i należy do człowieka. Jeśli powiesz AI, aby „napisała cały ekwipunek, walczyła i zapisywała system razem”, otrzymasz działający, ale ściśle powiązany, trudny w utrzymaniu, nierozszerzalny kłębek przędzy. Zamiast tego projektujesz architekturę, wykorzystujesz sztuczną inteligencję do zapełniania małych komponentów zdefiniowanymi interfejsami. Dobra architektura robi różnicę w miarę rozwoju gry: złe decyzje wracają rok później jako dług techniczny, który opóźnia każdą nową funkcję.
Kolejnym źródłem długu alimentacyjnego jest kod, który wchodzi do projektu bez zrozumienia. System napisany przez sztuczną inteligencję mógłby działać już dziś; Kiedy jednak po sześciu miesiącach trzeba go wymienić i nikt nie pamięta co zrobił, dług zamienia się w odsetki. Dlatego niezbędne są dwie dyscypliny: czytanie i zrozumienie kodu w czasie produkcji oraz proszenie AI o wyjaśnienia komentarzy. Ogólna zasada jest taka, że nie umieszczaj w swoim projekcie żadnego kodu AI, którego nie możesz sam przepisać lub przynajmniej wyjaśnić linijka po linijce. AI zapewnia prędkość; Twoja dyscyplina zapewnia trwałość.
trzy mini etui
Przypadek 1 — Kontekst wydania zapobiegł błędowi. Programista po raz pierwszy powiedział: „Napisz inwentarz dla Unity”; kod korzystał ze starego API, nie został skompilowany. Następnie podano kontekst „Unity 2022.3, C#, oparty na ScriptableObject”; kod skompilowany za pierwszym razem i pasuje do projektu. Kontekst zaoszczędził godzinę debugowania.
Przypadek 2 – Pułapka wydajności. W jednej grze liczba klatek na sekundę była niska. Podczas profilowania zauważono, że metoda aktualizacji stworzona przez sztuczną inteligencję przydzielała nową listę w każdej ramce i wyszukiwała wrogów. Naprawiono kod z buforowanym odniesieniem i aktualizacją niekwadratową, zwiększając liczbę klatek na sekundę z 42 do 60.
Przypadek 3 — Wykryta luka w zabezpieczeniach. W grze wieloosobowej kod wygenerowany przez sztuczną inteligencję obliczył szkody poniesione przez klienta i zgłosił je serwerowi; było to podatne na oszukiwanie (klient mógł zadać nieskończone obrażenia). Kod został ustawiony jako autorytarny serwerowy (serwer oblicza szkody). Audyt zapobiegł skandalowi związanemu z oszustwami po publikacji.
Cztery szablony do kopiowania
1) Żądanie kodu z kontekstem:
Silnik: Unity 2022.3. Język: C#. Architektura: [np. oparty na komponentach]. Ograniczenie: Alokacja w aktualizacji; być czytelny i komentowany. Zadanie: [pojedynczy, zdefiniowany element, np. „kontroler znaków podwójnego skoku”]. Sprawdź, czy każdy interfejs API, którego używasz, jest w tej wersji; Jeśli nie jesteś pewien, daj mi znać.
2) Wyjaśnienie/przegląd kodu:
Wyjaśnij poniższy kod linia po linii i napisz (1) co robi, (2) możliwe problemy z wydajnością (przydział na ramkę, drogie wyszukiwanie), (3) możliwe błędy, (4) sugestie ulepszeń. Kod: [wklej]
3) Audyt bezpieczeństwa gry wieloosobowej:
Sprawdź następujący kod gry wieloosobowej pod kątem bezpieczeństwa. A konkretnie: miejsca, w których klient jest zaufany, stan krytyczny wymagający weryfikacji na serwerze (uszkodzenia, punkty, pieniądze), brak walidacji danych wejściowych. Zaproponuj poprawkę, aby serwer stał się autorytarny. Ma to na celu tylko obronę mojej własnej gry. Kod: [wklej]
4) Refaktor skupiony na profilu wydajności:
Ten kod działa na każdej ramce i zmniejsza szybkość klatek: [kod]. Znajdź alokacje, kosztowne wyszukiwania i niepotrzebne operacje klatka po klatce; Optymalizuj bez zakłócania działania dzięki buforowaniu i rzadszym aktualizacjom. Wyjaśnij zmiany.
Słaba zachęta/silna zachęta
Słaba zachęta:
Napisz system składowania w Unity.
Brak wersji, formatu, zakresu danych, bezpieczeństwa; Wynik jest ogólny i ryzykowny.
Potężny monit:
Silnik: Unity 2022.3, C#. Zadanie: system zapisu/ładowania oparty na JSON. Do zapisania: lokalizacja gracza, ekwipunek, postęp. Ograniczenie: zarządzanie błędami przed uszkodzeniem plików; Dodaj kontrolę integralności (hash) do pliku zapisu, aby zapobiec oszustwom poprzez łatwą zmianę go przez gracza. Skomentuj kod i sprawdź, czy każdy interfejs API jest w tej wersji.
Wersjonowanie, zakres, obsługa błędów i sprawdzanie integralności wzmacniają wyniki.
Tabela kontekstu silnika/języka
silnik
język
Co musisz dać AI
szczególną uwagę
jedność
C#
Wersja, system wejściowy/fizyczny
Aktualizuj alokację, cykl życia
nierealne
Plan
Wersja, kontekst węzła
Granice logiki wizualnej
nierealne
C++
Wersja, budowa modułu
Pamięć, GC, makra
tryb wieloosobowy
oba
model sieciowy
Prezenter-autorytaryzm
Typowe błędy
- Nieokreślenie silnika/wersji. Pochodzi z przestarzałego lub wymyślonego API.
- Ufanie kodowi bez jego zrozumienia. Narasta niemożliwy do spłaty dług.
- Nie mierzę wydajności. Alokacja klatka po klatce po cichu zmniejsza liczbę klatek na sekundę.
- Zaufanie klientowi. W trybie wieloosobowym występuje luka w zabezpieczeniach umożliwiająca oszukiwanie.
- Chcę mieć cały system na raz. Mały, testowalny element jest bezpieczniejszy.
Podsumowując
Sztuczna inteligencja jest potężnym pomocnikiem w kodzie gry, ale wymaga silnika, wersji i kontekstu architektonicznego. Nie umieszczaj go w projekcie bez przeczytania i zrozumienia kodu, skompilowania go i przetestowania oraz sprawdzenia wydajności i bezpieczeństwa. Utrzymuj autorytaryzm serwera w trybie wieloosobowym i wykorzystuj informacje dotyczące bezpieczeństwa wyłącznie do celów obronnych i weryfikacji.
Zadanie aplikacji
Wybierz mały element (np. podwójny skok lub prosty ekwipunek). Wygeneruj kod, dostarczając silnikowi i wersji szablon „żądanie kodu z kontekstem”. Następnie usuń ryzyko związane z wydajnością i błędami, zlecając sprawdzenie tego samego kodu za pomocą szablonu „Opis/recenzja kodu”. Skompiluj i przetestuj kod w silniku.
lista kontrolna
- [ ] Podałem kontekst silnika, wersji, języka i architektury.
- [ ] Przeczytałem i zrozumiałem kod; Chciałem to z komentarzem.
- [ ] Skompilowałem i przetestowałem to w silniku oraz zmierzyłem wydajność.
- [ ] Sprawdziłem bezpieczeństwo w kodzie sieci/ekonomii/zapisu.
- [ ] Informacje dotyczące bezpieczeństwa wykorzystałem wyłącznie do obrony własnej gry.