Herní programátor je osoba, která vezme vizi designéra a skutečně ji oživí v herním enginu, který používáme. Pracuji v týmu pro programování mobilních her v Kwalee, takže pro nás je to převážně Unity. Pokud chce designér například, aby se kostka kutálela určitým způsobem, napíšu skript na řízení logiky. Spolupracujeme také s herními umělci, abychom zajistili, že naše hry nejen skvěle vypadají, ale také dosahují skvělého výkonu na zařízení.
V tomto blogu se budu opírat o svých pět let práce v Kwalee a sdílet zásadní pohledy a rady ohledně toho, jak být herním programátorem. Projdu některé jazyky, nástroje a principy, které používáme, své kariérní rady, stejně jako tipy pro začátečníky a pokročilé.
Co Dělá Herní Programátor?
Píšeme kód a pomáháme dokončit hru. Zatímco herní designéři vytváří koncepty a herní umělci vytváří assety, programátor vytvoří funkční, hratelný zážitek. Vytváříme a optimalizujeme výkon hry a řešíme problémy, které jsou identifikovány.
Zajišťujeme, aby hra působila skvěle a běžela s vysokým výkonem. Abychom toho dosáhli, musíme zajistit, že samotný kód je čistý a rozšiřitelný, což je těžší, než si myslíte. Používáme standardy kódování, abychom udrželi konzistentní kvalitu napříč všemi našimi týmy - dokument, který může obsahovat standardy pojmenování, formátování atd. Někdy však věci nejsou vždy tak přímočaré a čas od času je třeba myslet mimo krabici, abyste dokončili věci včas.
Naše povinnosti také zahrnují zajištění, že hra dobře běží na hardwaru koncového uživatele. Například, v našich mobilních hrách potřebujeme zabránit tomu, aby se starší zařízení příliš zahřívala, takže spolupracujeme s umělci na optimalizaci počtu "draw calls". "Draw call" je příkaz, který je poslán z Centrální procesorové jednotky (CPU) do Grafické procesorové jednotky (GPU), aby vykreslila objekt na obrazovce - říká GPU, aby nakreslila grafické prvky jako textury, meshe nebo shadery. Potřebujeme minimalizovat počet těchto "draw calls" ve hře, protože mít jich příliš mnoho může způsobit problémy jako poklesy snímkování nebo záškuby. Existuje mnoho způsobů, jak to řešit, ale věci jako seskupování více objektů do jednoho "draw call" nebo snižování počtu unikátních textur a materiálů mohou pomoci. To je zvláště důležité pro mobilní zařízení, protože existuje tolik různých zařízení na trhu, všechna s různými technickými specifikacemi.
Jaké Jsou Hlavní Programovací Jazyky Her?
Většinu času jako denní herní programátoři strávíme skriptováním v jedné z řady programovacích jazyků - přesto jsme jiného typu softwarových vývojářů. Existuje mnoho jazyků, z nichž si můžete vybrat. Některé se zdají být jednodušší než jiné, ale jakmile se jeden naučíte a zvládnete, určitě se můžete naučit i další - hlavní výzvou je dostat se k tomu.
Zde je úvod do některých z nejpopulárnějších herních programovacích jazyků:
- C# - univerzální a populární programovací jazyk široce používaný ve herním vývoji. Pro začátečníky je to jeden z nejjednodušších k pochopení. Jednou z jeho nejlepších vlastností je automatické garbage collection - tedy správa přidělování paměti za vás - velmi užitečné pro zaneprázdněné programátory jako my.
- C++ - naopak, je to neřízený jazyk, takže musíte po osobě spravovat alokaci a dealokaci paměti, což ho činí složitějším. Nicméně, umožňuje větší rychlost, kontrolu a výkon.
- Java - podobně jako C#, Java má vlastní správu paměti a garbage collection, což usnadňuje vývojářům manipulaci s pamětí, aniž by se ztráceli v detailech. Je široce využívána ve webovém vývoji a podnikových aplikacích, a ačkoliv nemusí být (možná) primárním jazykem pro herní vývoj, stále zůstává solidní volbou pro vytváření škálovatelných a efektivních aplikací.
- Swift - to je nativní jazyk Apple pro tvorbu aplikací a her pro iOS a macOS. To však znamená, že je méně užitečný pro vývoj napříč platformami - protože se snažíme vždy publikovat naše mobilní hry na Android i iOS.
Jak Se Stát Herním Programátorem?
Existuje řada různých způsobů, jak se stát herním programátorem. Moje cesta je poměrně konvenční - studoval jsem Games Design a Programming na University of Staffordshire. Původně jsem si myslel, že se vydám do game artu - už jako dítě jsem byl velmi zapálený do umění, navíc jsem opravdu měl rád umělecké moduly na univerzitě, ale když jsem tam byl objevil jsem, že mě opravdu baví tvořit hratelnost. Mohlo mi trvat několik dní vytvořit jediný vysoce polygony model, ale mohl jsem udělat, aby kachna létala a explodovala za polovinu času. Prototypování mi umožňuje vidět výsledek rychle přímo přede mnou.
Nicméně, krásou programování her je, že je přístupné většině lidí, i když neprojdete tradiční cestou. Měl jsem přátele na univerzitě ve věku 50+ - nikdy není příliš pozdě na to vyzkoušet něco nového. U Kwalee jsme dokonce najali někoho, kdo se učil především přes YouTube videa a vytvořil si hru jen pro zábavu. Dnes existuje tolik příležitostí pro čerstvé a dychtivé talenty. Když se díváme na portfolia novějších studentů, mají toho podstatně víc pod svým opaskem. Vidíme jak fantastický talent přichází, je to vzrušující čas v oboru.
Otázka, kterou se pravděpodobně chcete zeptat - ovlivní AI programování jako profesi? Může být velmi užitečná, a zlepšuje se. Perfektní, pokud potřebujete něco vysvětlit nebo narazíte na problém. Můžete ji využít k řešení chyb nebo refaktoraci (‚uklidit‘) kódu vložením do nejnovějšího ChatGPT. Nicméně, když se díváme na portfolia, chceme vidět práci, kterou jste sami vytvořili a jste na ni hrdí, AI je v pořádku používání, ale snažte se ji nepoužívat jako náhradu za své vlastní dovednosti.
Jak Vypadá Typický Den V žIvotě Herního Programátora?
Dovolte mi uvést příklad z mého života. Jsem Lead Programmer (říkám tomu svou vysněnou práci), takže je to skvělá kombinace hands-on praxe a vedení dalších programátorů!
Typický den v mém světě je přijít, udělat si latte a potom dvakrát zkontrolovat jakékoli chyby nebo blokátory pro tým QA. Kontroluji s týmem, zda někdo potřebuje, abych něco udělal k odblokování jejich práce. Potom začne hrát hudba a úkoly se objeví. Budeme sdílet progres videa přes Slack k rychlé zpětné vazbě, přičemž se zároveň pohybujeme mezi 2-3 projekty pro podporu členů mého týmu. Také trávíme hodně času investováním do sdílených systémů, aby naše programování bylo efektivnější - všechno to potřebuje pravidelně udržovat, aktualizovat a opravovat, aby vše hladce fungovalo.
Tipy Pro Začínající Herní Programátory
Pokud začínáte a toužíte stát se plnohodnotným programátorem, tady jsou mé tipy pro začátečníky!
- Je tolik, co se můžete naučit online, na YouTube a existuje mnoho příkladů her, že nemáte důvod se neučit! Populární enginy jsou zdarma a je s nimi zábava pracovat!
- Na úplném opačném konci spektra může být 30 let starý, ale měli byste se pokusit přečíst si vlivnou knihu "Design Patterns: Elements of Reusable Object-Oriented Software" od tzv. Gang of Four autorů, která představila některé základy herních patternů, které používáme každý den v programování.
- Možná máte své vlastní nápady, ale ujistěte se, že začínáte jednoduše, abyste ovládali základy.
- Pokud nejste vázáni na komerční projekt, můžete psát kód tolik, kolik chcete, takže si užijte spoustu zábavy při vytváření bláznivých věcí.
- Vytváření portfolia je opravdu klíčové (a je to, jak jsem dostal svou práci). Ale buďte velmi opatrní, abyste nepublikovali jen staré standardní školní práce, protože vidíme mnoho aplikací s těmito. I strávení jednoho dne při reskinování a přidávání více funkcí vám pomůže vyniknout.
- Vytvoření vlastní hry reálného světa je také chytrý nápad - je velmi levné získat hru na Google Play, takže uveďte něco, co můžete ukázat náborářům/vydavatelům/rodině/zvířátkům na svém telefonu. Možná dokonce vyděláte několik tisíc dolarů ročně, dokud nebudete nastaveni na exkluzivní práci na plný úvazek, což je bonus! Nebo vás může svádět vytvořit svou vlastní rozsáhlou hru a spolupracovat s vydavatelem.
- Nenaučte se jen programování - naučte se o umění, designu, QA a dalších disciplínách, se kterými budete interagovat. Například stojí za to porozumět metodám QA, protože můžete padnout do pasti předpokladu, že něco funguje, ale musíte to hrát jako uživatel, ne jako někdo, kdo napsal kód a má definovaný pohled na to, jak očekáváte, že ‚bude hrán‘. Buďte destruktivní, zkuste náhodné věci, které by lidé mohli udělat, mačkání náhodných tlačítek a další bizarní chování.
Pokročilé Tipy Pro Programátory
Zde jsou některé z tipů, které mi pomohly přejít od juniora, k programátorovi, k seniorovi a k vedení.
- Vždy se můžete dále učit, a pamatujte, že bez chyb nemůžeme učit!
- Pokud jste opravdu zapálení pro něco - můžete se stát více specializovaní. Například, pokud rádi hrajete se shader a render pipelines, učte se více o tom, jak používat grafické shadery k rozšíření vaší schopnosti vykreslovat složité vizuální efekty a použít render pipelines k optimalizaci výkonu nebo k vytváření úžasných efektů.
- Můžete vytvořit něco opravdu cool, jako komplexní systém, nahrát ho do asset store k prezentaci, pokud to vaše smlouva umožňuje a ukázat svou pokročilou práci. Můžete se vyvíjet jako specificita typu programátora, jako herní programátor, serverový programátor, grafický programátor nebo programátor pro více hráčů.
- Alternativně můžete jít na managementovou cestu jako já a mentorem lidí. Mou taktikou pro postup mé kariéry bylo přijmout nové odpovědnosti. Nejprve jsem začal zlepšovat menší věci, tj. malé workflow změny. Potom jsem udělal procesy jednodušší použitím šablon, abych ušetřil čas při vytváření nových projektů. Potom jsem získal chuť pro mentorství a vedení, což mi pomohlo získat více sebevědomí a nyní se účastním peer review, code review, pořádám workshopy a vedu týmy na projektech.
Ať už pracujete jako součást týmu nebo jako manažer, je stejně důležité dávat pochvalu jako je dávat konstruktivní kritiku. Při hodnocení kódu je dobré lidi povzbudit!
Jaké Jsou Klíčové Principy Programování Her?
Existují některá klíčová témata, která musí jednoduše do blogu o programování her zapadat. Tyto jsou některé z nejdůležitějších věcí, které zvažujeme.
Source Control/Version Control
Stejně jako máte save pointy ve hrách, existují save pointy v projektovém vývoji. Působí jako obecná úložná místa pro projekt a znamenají, že tři nebo čtyři programátoři mohou pracovat na systému současně, vytvářet změny a posílat je na server. Umožňuje nám sledovat tyto změny a snadno se vrátit zpět, pokud se něco zlomí. Pokud na stejné souboru pracují dva vývojáři, stane se tento soubor součástí slučování, pokud jsou konflikty, můžeme je manuálně vyřešit nebo vybrat změny jednotlivce k použití. To se bude často dít při používání Prefabů nebo Scén v Unity.
Tyto termíny se někdy překrývají, ale obecně, source control se zaměřuje na kód a version control zahrnuje všechny projektové soubory, assety a dokumentaci.
Když poprvé začínáte používat Source Control, může to být zpočátku děsivé, může se zdát velmi přehlcující a když dojde na konflikty, můžete si být nejistí, co dělat. Ale povaha version control vám pomáhá ukládat momenty v čase, takže pokud často aktualizujete a používáte podrobné popisky commitů, je to neuvěřitelně užitečné a bezpečné. Můžete se vrátit k více bodům, mít více větví atd. Přemýšlejte o tom jako o bezenečném (záchranném) síti vývojářů, takže se vyhneme verzi Toy Story 2 od Pixaru - náhodně vymazané a pak obnovené z pevného disku u jejich technického ředitele doma, místo toho to vše bezpečně uloženo na serveru.
Objektově orientované programování
Toto je typ programování, který ve společnosti Kwalee primárně používáme. Využívá objekty k reprezentaci reálných věcí nebo abstraktních konceptů a jeho cílem je organizovat kódovou základnu pomocí principů, které odrážejí způsob, jakým vnímáme a interagujeme s objekty v reálném světě. Pomáhá udržovat komplexní systémy tím, že organizuje kód do samostatných tříd, které lze snáze opakovaně používat, škálovat a udržovat.
Samozřejmě, je zde debata o tom, zda je dobré nebo ne. Zatímco to není nejvýkonnější, funguje dobře. Stejně jako u jazyků, každý má své vlastní pro a proti a měli byste se jeden naučit jako start a získat přehled o tom, jak jazyky a překladače (překladatelé lidského kódu na strojový kód) fungují. Můžete také považovat jiné typy programování, jako je funkcionální programování, které se chová více jako matematika, logické programování, které používá fakta a pravidla, nebo procedurální programování, které používá krok za krokem data.
Programové vzorce
To jsou úžasné věci - znovupoužitelné řešení, která vám pomohou s běžnými problémy, se kterými se setkáte ve svém návrhu softwaru. Poskytují vám šablonu pro vyřešení problémů, takže nemusíte pokaždé vynalézat kolo a můžete se držet osvědčených řešení.
Například, Singleton design pattern vám pomáhá zajistit, že existuje pouze jedna instance třídy, jako je například správce herních nastavení, v celém vašem herním světě, a dává vám k němu globální přístupový bod. Kód pro tento vzor znamená, že existuje pouze jedna instance SettingsManager třídy, takže ji nemusíte znovu vytvářet nebo duplikovat pokaždé, když ji potřebujete.
Existuje také Factory Pattern, který může pomoci při vytváření objektů organizovanějším a flexibilnějším způsobem. Můžete definovat metody pro generování specifických typů objektů, jako jsou postavy nebo předměty, na základě vstupních parametrů, což vám umožňuje snadno vytvářet více objektů podobného typu, aniž byste začínali od začátku pokaždé.
Doufám, že tento blog vám poskytl chuť na programování her, ať už jste v této oblasti nový nebo zkušený programátor! Pokud jste tvrdě pracující, ale zábavná osoba, budou se vám u nás hodit, proto zjistěte více o kariéře v Kwalee. Jinak se můžete naučit o našich mobilních hrách nebo publikování a získat více informací o tom, co vydáváme jako vývojář a vydavatel.








