Register

A password will be e-mailed to you.

Ako študenta IT a hráča ma vždy lákala predstava pracovať na vývoji nejakej hry, či už v rámci nejakého veľkého projektu, alebo ako nezávislý vývojár. Všetko to však boli len sny a skôr som si myslel, že sa zamestnám v nejakej korporácii a budem pracovať na nejakých bezpečnostných riešeniach. Keď som sa v škole dostal k predmetu, ktorého náplňou bolo OpenGL, otvoril sa mi nový svet. Preto som sa rozhodol pre tento menší vývojársky denník, v ktorom som zahrnul svoje skúsenosti s enginom Unity.

Predmet BI-PGR ma za posledný semester naučil, že programovať čisto v OpenGL a C++ je peklo na zemi. Hneď vysvetlím. Vytvoriť 3D hru bez enginu z prakticky prázdneho textového súboru je síce pôsobivé, no veľmi nepraktické. Predmet nás samozrejme nemal naučiť programovať pôsobivé a úchvatné 3D hry typu Mass Effect alebo BioShock, ale mal nás uviesť do problematiky 3D grafiky, fungovania grafických akcelerátorov a princípov vykreslovania 3D na počítači. Samozrejme že moja “hra”, ktorá pozostávala z púštnej scény spolu s ruinami vedeckého laboratória, nie je nijak úchvatná, no dalo mi to veľa.

ruiny

Už dávno som sa naučil, že vysoká škola zo mňa nemá urobiť hardcore programátora a hackera (aj keď predmet v ktorom sme lámali šifry bola zábava), ale má nás naučiť základným princípom programovania, algoritmizácie, matematiky a hlavne myslenia. IT odvetvie je o neustálom učení sa nových vecí, je strašne premenlivé a aj v 50-ke sa budem musieť učiť nové veci. No po absolvovaní tejto školy to pre mňa nebude žiadny problém, a aj to je čiastočne jej význam.

No keď vás hodia do vody a povedia: “Tak plávajte”, veľmi vás to nepodporí. Prvé 3 týždne s C++/OpenGL boli pre mňa ako španielska dedina. Díval som sa na fungujúce demo kódy a snažil sa pochopiť, o čo tam ide. Keď máte na cvičení v jeden týždeň jednoduchú úlohu aplikovať textúry v shaderoch a hneď druhý týždeň je v pláne implementácia Bézierových kriviek pre pohyb objektu, tak si nie ste istí, či to nedávajú všetci v skupine, alebo len vy ste blbí že po vás chcú, aby ste takúto vec pochopili za týždeň a vy netušíte, o čo sa jedná.

I have no idea what I'm doing

Áno, to hore je môj kód. Nakoniec všetko dobre dopadlo, semestrálku som odovzdal, aj keď trojtýždňový pobyt v nemocnici trochu narušil moje plány a nestihol som implementovať bonusové veci ako normálové mapy, alebo výškovú mapu terénu, a tak som sa musel spokojiť s modelom terénu. No ale čo teraz? Teda okrem učenia sa teórie na skúšku. Kam ďalej? Tak som sa rozhodol naučiť sa pracovať s nejakým herným enginom vo svojom voľnom čase.

Najskôr som skúšal Unreal Engine, hlavne kvôli skriptom v C++ a dobrej povesti. A hlavne to bol jediný engine, ktorý ma napadol. Ach ako som to oľutoval. Nechápte ma zle, je to dobrý engine, ale UI je neprehľadný a tutoriály s dokumentáciou mi príliš nepomohli. Tak som nakoniec skončil s Unity. Unity možno nie je tak prepracovaný engine, no je jednoduchý. Má skvelú dokumentáciu, úžasnú komunitu ľudí a poskytne vám všetko, čo potrebujete, vrátane podpory DirectX12, Vulkan a Metal.

Začiatky s Unity

Hlavne som sa pre začiatok rozhodol pre nejakú jednoduchú 2D hru, na ktorej sa s Unity naučím pracovať. Tak som si otvoril Unity tutoriály. Rozhodol som sa prekúsnuť programovanie v C#, otvoril GIMP a GarageBand a začal tvoriť nejaké tie postavičky, prostredie a hudbu. Než som sa dokázal rozhodnúť pre nejaký jednotný grafický štýl, trvalo to asi mesiac.

img_6815-1

Naučil som sa základné veci ako kolízie, fyziku objektov a ich interakciu. Samozrejme som pri učení porušil pár základných pravidiel programovania, veď aj tak je to len pre mňa. A tak som napchal všetky funkcie asi len do troch hlavných tried. Takže taký Audio Manager sa k tomu staral aj o ukladanie stavu hry a o aktualizáciu UI. V škole by mi za to ruky zlámali.

Keď už som sa naučil vytvoriť jednoduchú 2D hru, povedal som si, že by nebolo zlé si to dať do životopisu. A aby som mal čo ukázať, rozhodol som sa, že by nebolo zlé vydať hru na nejakej platforme. A aj keď moja testovacia hra bola slušná, nechcelo sa mi ju prerábať. A tak som sa pustil do jednoduchej hry naostro. Grafika a hudba pripravené, počet skriptov sa vyšplhal na 19, prichádzajú na rad optimalizácie.

Chyby, chyby a ďalšie chyby

To sú veci, ktoré vás v škole nenaučia. Praktiky ako object pooling, používanie mipmáp, GPU instancing. V hre mi totiž poletuje asi 30 asteroidov. Ono sa to nezdá ako priveľa, ale predsa len, výkon mobilných čipov nie je nič extra, hlavne ak cielite na veľké množstvo zariadení. Najhoršie je aj tak hľadanie chýb. Čím vám hra rastie a vy narazíte na nejakú náhodnú nešpecifickú chybu, tým horšie sa hľadá jej pôvod. Strávil som dokonca 4 hodiny hľadaním jednej chyby.

snimka-obrazovky-2017-01-08-o-21-42-17

Už som sa zmieril s tým, že je to boží plán a že sa s tým budem musieť naučiť žiť. A nakoniec zistíte, že máte niekde chybičku v znamienku matematickej operácie. Alebo že ste zabudli zavolať 150 riadkovú funkciu, ktorú ste vymýšľali hodinu. Alebo máte private premennú namiesto public. A keď si myslíte, že už ste všetko vychytali a nahráte hru do obchodu, zistíte, že ju máte podpísanú dočasným debug certifikátom a tak ju nemôžete aktualizovať.

Pretože Google nedovoľuje nahrať aktualizáciu s iným podpisom a ani vymazať aplikáciu, len ju deaktivovať, skončíte s dvomi identickými hrami v obchode, z ktorých jednu máte deaktivovanú a premenovanú na Cancelled. A nastaviť každú novú appku v obchode trvá pol hodinu. Prisahám bohu, že som chcel niekoho zabiť, keď som to musel nastavovať všetko znovu.

Chaos Thrust

Peklo menom Google Play Services

Keď už som úspešne nahral svoju hru na obchod, mohol som začať s integráciou Google Play Services. Nastaviť achievementy a rebríček najlepších hráčov. Bohužiaľ Unity natívne nepodporuje Google Play Services a tak som si musel stiahnuť plugin. Bohužiaľ, ten občas nefungoval tak ako by mal. Google služby mi totiž nefungovali po načítaní novej scény, aj keď mali medzi scénami pretrvávať. Najhoršie je, že keď chcete testovať implementáciu Google Play Services, musíte hru nahrať do obchodu. A tak sa mi stalo, že som za jeden deň nahral aj 6 aktualizácií. Moji kamaráti, ktorí hru dobrovoľne testovali boli teda nadšení.

Potom objavíte ešte 10 chýb a nakoniec zistíte, že vaša konečná verzia je vlastne 16. aktualizácia. Nepočítam s tým, že zo mňa tá hra urobí boháča, budem rád ak sa aspoň trochu uchytí. Ale som rád, že som sa do toho pustil. Zase som sa niečo naučil a dúfam že jedného dňa sa dostanem k naozaj veľkému a úžasnému projektu. Keby si niekto chcel moje hry vyskúšať, môže si ich stiahnuť z Google Play Store. A pustil som sa do ďalšieho projektu. Zatiaľ môžem poskytnúť len malinkú ukážku z hry a grafického štýlu, ktorý používam.

Keby som ešte neštudoval, rozhodne by som sa ponoril do herného biznisu naplno. Takto nad tým síce trávim tak hodinku denne, ale zato ma to baví a nikdy nie je na škodu si skúsiť nové veci. Pokiaľ ste aj vy niekedy premýšľali nad tým, že by ste tvorili hry, dá sa to. Naučiť sa to môžete od nuly, no musíte mať v sebe okrem matematiky a programovania aj trochu tej umeleckej duše.

Komentuj!