Przewodnik po programowaniu gier - porady, narzędzia i kariery

przez Connor Taylor

Programista gier to osoba, która realizuje wizję projektanta i sprawia, że działa ona w silniku gry, którego używamy. Pracuję w zespole programowania gier mobilnych w Kwalee, więc dla nas to głównie Unity. Na przykład, jeśli projektant chce, aby kość toczyła się w określony sposób, napiszę skrypt obsługujący tę logikę. Współpracujemy także z artystami gier, aby upewnić się, że nasze gry wyglądają niesamowicie, a jednocześnie osiągają świetne wyniki na urządzeniach końcowych.

W tym blogu, oprę się na moich pięcioletnich doświadczeniach w pracy dla Kwalee, aby podzielić się niezbędnymi spostrzeżeniami i poradami na temat bycia programistą gier. Przeprowadzę cię przez niektóre języki, narzędzia i zasady, których używamy, udzielę porad dotyczących kariery, a także podzielę się poradami dla początkujących i zaawansowanych programistów.

Co Robi Programista Gier?

Piszemy kod i pomagamy w urzeczywistnieniu gry. Podczas gdy projektanci gier tworzą koncepcje, a artyści tworzą zasoby, programista tworzy funkcjonalne, grywalne doświadczenie. Tworzymy i optymalizujemy wydajność gry oraz rozwiązujemy wszelkie problemy, które zostaną zidentyfikowane.

Dbamy o to, aby gra była świetna w odbiorze i miała wysoką wydajność. Aby to osiągnąć, musimy upewnić się, że sam kod jest czysty i rozszerzalny, co jest trudniejsze, niż się wydaje. Używamy standardów kodowania, aby utrzymać jednolitą jakość w naszych zespołach - dokument, który może zawierać standardy nazewnictwa, formatowanie itd. Jednak czasami rzeczy nie są takie proste i od czasu do czasu trzeba pomyśleć nieszablonowo, aby zdążyć na czas.

Nasze obowiązki obejmują również zapewnienie, że gra działa dobrze na sprzęcie końcowego użytkownika. Na przykład, w naszych grach mobilnych musimy unikać przegrzewania się starszych urządzeń, więc współpracujemy z artystami, aby zoptymalizować liczbę wywołań rysunkowych. Wywołanie rysunkowe to polecenie wysyłane z jednostki centralnej (CPU) do jednostki graficznej (GPU) w celu renderowania obiektu na ekranie — mówi GPU, aby narysował elementy graficzne, takie jak tekstury, siatki czy shadery. Musimy zminimalizować liczbę tych wywołań rysunkowych w naszej grze, ponieważ ich zbyt duża ilość może powodować problemy, takie jak spadki liczby klatek na sekundę lub zacinanie się. Istnieje wiele sposobów rozwiązania tego problemu, ale takie jak grupowanie wielu obiektów w jedno wywołanie rysunkowe lub zmniejszenie liczby unikalnych tekstur i materiałów mogą pomóc. Jest to szczególnie ważne dla gier mobilnych, ponieważ na rynku jest tyle różnych urządzeń, wszystkie o różnych specyfikacjach technicznych.

Jakie Są Główne Języki Programowania Gier?

Większość naszego czasu jako codzienni programiści gier spędzamy na skryptowaniu w jednym z wielu języków programowania - w końcu jesteśmy programistami o innym typie. Jest mnóstwo języków do wyboru. Niektóre wydają się łatwiejsze niż inne, ale gdy już nauczysz się i opanujesz jeden, z pewnością nauczysz się innych - głównym wyzwaniem jest zyskać pierwsze doświadczenie.

Oto wprowadzenie do niektórych z najpopularniejszych języków programowania gier:

  • C# - wszechstronny i popularny język programowania powszechnie stosowany w tworzeniu gier. Jest jednym z najłatwiejszych do nauki, jeśli jesteś początkujący. Jedną z jego najlepszych cech jest automatyczne zarządzanie pamięcią - więc zarządza alokacją pamięci za ciebie - bardzo przydatne dla zapracowanych programistów takich jak my.
  • C++ - w przeciwieństwie, to jest język niezarządzany, więc musisz ręcznie przydzielać i zwalniać pamięć, co sprawia, że jest to większy krok pod względem złożoności i trudności. Jednak pozwala na większą szybkość, kontrolę i wydajność.
  • Java - podobnie jak C#, Java ma własne zarządzanie pamięcią i jej automatyczne zwalnianie, co ułatwia programistom zarządzanie pamięcią bez zagłębiania się w szczegóły. Jest powszechnie używana w tworzeniu stron internetowych i aplikacji korporacyjnych, a choć może (choć niekoniecznie) nie być najlepszym wyborem do tworzenia gier, pozostaje solidną opcją do tworzenia skalowalnych i wydajnych aplikacji.
  • Swift - to natywny język Apple do tworzenia aplikacji i gier na iOS i macOS. Jednak oznacza to, że jest mniej przydatny do tworzenia aplikacji na wiele platform - ponieważ dążymy do publikowania naszych gier mobilnych zarówno na Android, jak i na iOS.

Jak Zostać Programistą Gier?

Istnieje wiele różnych sposobów na zostanie programistą gier. Moja droga jest dość konwencjonalna - studiowałem projektowanie gier i programowanie na Uniwersytecie Staffordshire. Początkowo myślałem, że zajmę się sztuką gier - zawsze pasjonowałem się sztuką jako dziecko, a także bardzo podobały mi się moduły artystyczne na uczelni, ale odkryłem, że naprawdę lubię tworzenie gier. Mogło mi zająć kilka dni, aby stworzyć jeden model o wysokiej rozdzielczości, ale potrafiłem sprawić, że kaczka latała i eksplodowała w połowie mniej czasu. Prototypowanie pozwala mi szybko zobaczyć wynik przed sobą.

Jednak piękno programowania gier polega na tym, że jest dostępne dla większości ludzi, nawet jeśli nie przechodzisz przez tradycyjną drogę. Miałem przyjaciół na uniwersytecie, którzy mieli ponad 50 lat - nigdy nie jest za późno, aby spróbować czegoś nowego. W Kwalee zatrudniliśmy nawet kogoś, kto nauczył się głównie za pośrednictwem filmów na YouTube i stworzył grę dla zabawy. Istnieje wiele możliwości dla świeżego i chętnego talentu dzisiaj. Patrząc na portfolio nowych studentów, mają oni znacznie więcej doświadczeń. Widzimy wspaniałe talenty i to ekscytujący czas w branży.

Pytanie, które prawdopodobnie chciałbyś zadać - czy AI wpłynie na programowanie jako zawód? Może być bardzo przydatne i staje się coraz lepsze. Idealne, jeśli potrzebujesz czegoś wyjaśnionego lub masz zacięcie z problemem. Możesz używać go do rozwiązywania błędów lub refaktoryzacji ('czyszczenia') swojego kodu, wklejając go do najnowszego ChatGPT. Jednak patrząc na portfolio, chcemy zobaczyć pracę, którą wykonywałeś i z której jesteś dumny, AI jest w porządku, ale staraj się nie używać go jako zamiennika dla swoich umiejętności.

Jak Wygląda Typowy Dzień W żYciu Programisty Gier?

Pozwól, że podam przykład na podstawie swojego życia. Jestem starszym programistą (nazywam to swoją wymarzoną pracą), więc to świetna mieszanka pracy praktycznej i zarządzania innymi programistami!

Typowy dzień w moim świecie to wejść do pracy, wypić latte, a następnie sprawdzić wszelkie błędy lub blokery dla zespołu QA. Sprawdzam z zespołem, czy ktoś potrzebuje, żebym coś zrobił, aby odblokować jego pracę. Następnie muzyka leci, a lista zadań idzie w górę. Dzielimy się filmami z postępów za pomocą Slacka, aby uzyskać szybkie opinie, przemieszczając się jednocześnie między 2-3 projektami, wspierając członków mojego zespołu. Spędzamy również dużo czasu inwestując w systemy wspólne, aby nasze programowanie było bardziej efektywne - wszystko musi być regularnie utrzymywane, aktualizowane i naprawiane, aby wszystko działało sprawnie.

Wskazówki Dla Początkujących Programistów Gier

Jeśli zaczynasz i marzysz o zostaniu pełnoprawnym programistą, oto moje porady dla początkujących!

  • Jest tyle do nauki online, na YouTube i jest tyle przykładowych gier, że nie masz wymówki, aby się nie uczyć! Popularne silniki są darmowe i są bardzo przyjemne w użyciu!
  • Na całkowicie przeciwnym końcu spektrum, może mieć 30 lat, ale powinieneś spróbować przeczytać wpływową książkę 'Wzorce projektowe: Elementy wielokrotnego użytku, obiektowo-zorientowanego oprogramowania' autorstwa tak zwanej grupy Gang of Four, która wprowadziła absolutne podstawy wzorców gier, które codziennie używamy w programowaniu.
  • Możesz mieć swoje własne pomysły, ale upewnij się, że zaczynasz prosto, abyś był osadzony w podstawach.
  • Kiedy nie jesteś związany z komercyjnym projektem, możesz pisać tyle kodu, ile chcesz, więc miej dużo zabawy, tworząc szalone rzeczy.
  • Budowanie portfolio jest naprawdę kluczowe (i to jest to, co pomogło mi zdobyć pracę). Ale bardzo uważaj, aby nie wrzucać tylko standardowych prac uniwersyteckich, ponieważ zobaczymy wiele aplikacji z tymi pracami. Nawet poświęcenie dodatkowego dnia na changing obrazu i dodanie więcej funkcji pomoże ci się wyróżnić.
  • Tworzenie własnej gry w świecie rzeczywistym to także mądra decyzja - bardzo tanio jest umieścić grę na Google Play, więc zrób coś, co będziesz mógł pokazać rekruterom/wydawcom/rodzinie/zwierzętom na swoim telefonie. Możesz nawet zarobić kilka tysięcy dolarów rocznie, dopóki nie zdobędziesz wyłącznej pracy na pełen etat, to bonus! Lub może cię to skłonić do stworzenia własnej pełnoprawnej gry i współpracy z wydawcą.
  • Nie ucz się tylko programowania - ucz się o sztuce, projektowaniu, QA i innych dyscyplinach, z którymi będziesz wchodził w interakcję. Na przykład warto zrozumieć metody QA, ponieważ możesz wpaść w pułapkę zakładając, że coś działa, ale musisz spojrzeć na to jako użytkownik, nie jako ktoś, kto napisał kod i ma określone wyobrażenie o tym, jak powinno być rozgrywane. Bądź destrukcyjny, spróbuj losowych rzeczy, które mogą robić ludzie, naciskając przypadkowe przyciski i inne dziwne zachowania.

Wskazówki Dla Zaawansowanych Programistów

Oto kilka wskazówek, które pomogły mi przejść od juniora, do programisty, do seniora i lidera.

  • Zawsze można uczyć się więcej i pamiętaj, że bez błędów nie możemy się uczyć!
  • Jeśli naprawdę jesteś pasjonatem czegoś - możesz się bardziej wyspecjalizować. Na przykład, jeśli lubisz zabawę z shaderami i przesyłaniem renderów, naucz się, jak używać shaderów graficznych, aby zwiększyć zdolność do renderowania skomplikowanych efektów wizualnych i używać przesyłania renderów, aby optymalizować wydajność lub tworzyć niesamowite efekty.
  • Możesz stworzyć coś naprawdę fajnego, takiego jak złożony system, przesłać to do sklepu z zasobami, aby to zaprezentować, jeśli pozwala na to twój kontrakt i pokazać swoje zaawansowane prace. Możesz rozwinąć niszę jako określony typ programisty, taki jak programista rozgrywki, programista serwerowy, programista graficzny lub programista wieloosobowy.
  • Alternatywnie, możesz się zająć zarządzaniem, tak jak ja, i mentorować ludzi. Moja taktyka na rozwój kariery polegała na pochłanianiu nowych obowiązków. Najpierw zacząłem zajmować się mniejszymi rzeczami, tj. drobne zmiany w przepływie pracy.. Potem ułatwiłem procesy, używając szablonów, aby zaoszczędzić czas przy tworzeniu nowych projektów. Potem zasmakowałem mentoringu i zarządzania, co pomogło mi zdobyć więcej pewności siebie, a teraz biorę udział w ocenach zespołowych, przeglądach kodów, prowadzę warsztaty i kieruję zespołami projektowymi.

Czy pracujesz jako część zespołu, czy jako menedżer, równie ważne jest udzielanie pochwał, jak i konstruktywnej krytyki. Gdy przeglądamy kod, dobrze jest podbudowywać ludzi!

Jakie Są Kluczowe Zasady Programowania Gier?

Są pewne kluczowe tematy, które muszą zostać omówione w blogu dotyczącym programowania gier. Oto niektóre z najważniejszych rzeczy, które bierzemy pod uwagę.

Kontrola wersji/Kontrola źródła

Podobnie jak masz punkty zapisu w grach, są punkty zapisu w rozwoju projektów. Działają jako ogólne miejsce przechowywania projektu i pozwalają 3-4 programistom pracować jednocześnie nad systemem, tworzyć zmiany i przesyłać je na serwer. Umożliwia nam to śledzenie tych zmian i łatwe ich cofanie, jeśli coś się zepsuje. Jeśli dwóch programistów pracuje nad tym samym plikiem, ten plik stanie się częścią scalania, jeśli są konflikty możemy ręcznie je rozwiązać lub wybrać, które zmiany zastosować. Będzie się to działo często przy użyciu Prefabów lub Scen w Unity.

Te terminy czasami się pokrywają, ale generalnie kontrola źródła skupia się na kodzie, a kontrola wersji zawiera wszystkie pliki projektowe, zasoby i dokumentację.

Kiedy zaczynasz korzystać z Kontroli Źródła, może to wydawać się nieco straszne na początku, może wydawać się przytłaczające, a przy konfliktach możesz czuć się niepewnie co do podjęcia decyzji. Jednak natura kontroli wersji pomaga zapisywać chwile w czasie, więc jeśli często aktualizujesz i używasz szczegółowych komunikatów o zatwierdzeniach, jest to niezwykle przydatne i bezpieczne. Możesz wrócić do wielu punktów, mieć wiele gałęzi itd. Traktuj to jako siatkę bezpieczeństwa dla programistów, dzięki czemu możemy uniknąć wersji Toy Story 2 produkcji Pixar - przypadkowo usuniętej i odzyskanej z twardego dysku w domu ich dyrektora technicznego, zamiast tego wszystko jest bezpiecznie tam na serwerze.

Programowanie Obiektowe

To jest typ programowania, który głównie stosujemy w Kwalee. Używa obiektów do reprezentowania rzeczy realnych lub abstrakcyjnych koncepcji i ma na celu organizację kodu zgodnie z zasadami, które odwzorowują, jak widzimy i wchodzimy w interakcje z obiektami w świecie rzeczywistym. Pomaga utrzymać złożone systemy poprzez organizację kodu w oddzielne klasy, które można ponownie używać, skalować i łatwiej zarządzać.

Oczywiście, istnieje debata na temat tego, czy jest to dobre, czy nie. Chociaż nie jest to najwyżej wydajnościowe, działa dobrze. Podobnie jak w przypadku języków, każdy ma swoje własne zalety i wady i powinieneś nauczyć się jednego na początek i zrozumieć, jak działają języki i kompilatory (tłumacze kodu ludzkiego na kod maszynowy). Możesz także rozważyć inne typy, takie jak programowanie funkcyjne, które traktuje to bardziej jak matematykę, programowanie logiczne, które używa faktów i reguł lub programowanie proceduralne, które używa kroków po kroku danych.

Wzorce programistyczne

To są niesamowicie użyteczne rzeczy - wielokrotne rozwiązania, które mogą pomóc w rozwiązaniu powszechnych problemów, z jakimi spotkasz się w swoim projekcie.

Na przykład, wzorzec projektu Singleton pomaga ci zabezpieczyć, że jest tylko jedna instancja klasy, takiej jak menedżer ustawień gry w całej twojej grze, i daje ci globalny punkt dostępu do niego. Kod dla tego wzorca oznacza, że istnieje tylko jedna instancja klasy SettingsManager, więc nie musisz jej odtwarzać ani duplikować za każdym razem, gdy jej potrzebujesz.

Istnieje również Wzorzec Fabryki, który może pomóc ci tworzyć obiekty w bardziej zorganizowany i elastyczny sposób. Możesz zdefiniować metody do generowania określonych typów obiektów, takich jak postacie lub przedmioty, na podstawie parametrów wejściowych, co pozwala ci łatwo tworzyć więcej obiektów tego samego typu bez zaczynania od zera.

Mam nadzieję, że ten blog dostarczył ci smaku programowania gier, niezależnie od tego, czy jesteś nowicjuszem w tej dziedzinie, czy doświadczonym programistą! Jeśli jesteś ciężko pracującą, ale zabawną osobą, pasujesz do naszego zespołu, więc dowiedz się więcej o karierach w Kwalee. W przeciwnym razie możesz dowiedzieć się o naszych grach mobilnych lub wydawnictwie i poznać więcej o tym, co publikujemy jako deweloper i wydawca.

O autorze:

Connor Taylor, główny programista gier w Kwalee, rozwija się w tworzeniu gier i wspieraniu zespołu pełnego zabawy. Z ponad 5-letnim doświadczeniem stworzył hity jak Jetpack Jump i mentoruje innych w rozwijaniu Unity.

Udostępnij ten artykuł: