„Jsem vývojář z Děčína. Vyvíjím téměř zásadně v C#, momentálně konkrétně v Unity3D.“ Takhle se na svém webu prezentuje Vratislav Medřický, student vysoké školy a – co je pro nás nejdůležitější – vývojář v Unity.
V tuto chvíli má na svém účtu již 5 her a stále pokračuje. Krom vývoje další a dalších her a brigády jakožto programátor také na svém Youtube účtu vydal několik tutoriálů pro vývoj hry v Unity pro Android zařízení. Dnes se tedy krom samotného vývoje her a programování zaměříme především na práci s Unity.
„Základy C# mám ze školy, zbytek jsem se učil tak celkově po seriálech na webu. Unity mám zásadně z videotutoriálů“
Ahoj, mohl by ses nám představit? (Mimojiné i např. tvou/tvé pozici/pozice)
Ahoj, jsem Vratislav Medřický z Děčína, je mi 21. Od střední se věnuji programování a ve druháku jsem to začal brát vážně. Od té doby jsem dělal ve firmě WBI na pozici C# junior developera, později jsem se pustil do vlastní produkce her pro Android a teď ještě k tomu dělám v Praze na zatím nejmenovaném projektu. Krom toho ještě vydávám tutoriál pro začátečníky na YouTube, kde v Unity vytvářím hru od píky
C#, Unity – kde ses tohle naučil? Z knížek, z tutoriálů či způsobem pokus-omyl? A byly tvé tehdejší zdroje již v češtině nebo ještě v angličtině?
Základy C# mám ze školy, zbytek jsem se učil tak celkově po seriálech na webu. Unity mám zásadně z videotutoriálů. Jelikož už dlouho nemám problémy přecházet plynule z technické angličtiny do češtiny a naopak, tak mi občas dělá problém si vzpomenout, v jakém jazyce tutoriály byly. Ale jsem si jistý, že ze začátku bylo vše v angličtině. Proto jsem se také uchýlil k tomu, abych udělal nějaký ten tutoriál.
Zmínil ses o „technické angličtině“. Jsou na ni knížky nebo se ji člověk musí naučit přirozeně, například z různých online fór?
Měl jsem namysli výrazy, co se programování, 3D matiky, 3D grafiky, Unity atd. týkají. A ty jsem se naučil používáním právě programů jako Visual Studio, Unity, GIMP, Blender nebo Inkscape. Když je má člověk v angličtině, donutí ho to se ji naučit. Velkou roli ale taky bude určitě hrát to, že většinu tutoriálů nedělají rodilí angličtí mluvčí, takže jejich angličtina je na nižší úrovni.
Vraťme se trochu více do historie. Kdy se přibližně datují Tvé vývojářské počátky? Až na střední, jak si řekl, nebo už dříve?
Určitě až na střední. Na základce jsme měli web, ale tomu se nedá říkat programování, pokud se bavíme o stylování. Co mě k tomu mohlo ještě přitáhnout, je program kTurtle, který jsme používali pod Linuxem. Slouží k učení základních algoritmů bez znalosti nějakého jazyka a člověku tu včas dodá jisté algoritmické myšlení. To samé Baltík, v tom jsem si hrál doma hodiny. Ale jak už jsem zmínil, C a C# začaly na střední a tam mě to pořádně chytlo.
Co tě vedlo k vývoji her? A podle čeho si se rozhodl, že budeš programátorem?
Co si budeme povídat, každý druhý žák základní školy chce „vyrábět hry“ (smích). Většina od toho upustí, když přijdou reálné nabídky odjinud nebo když na střední zjistí, že musí napsat 10 řádků kódu, aby jim to vypsalo na obrazovku jednu nenaformátovanou větu „Ahoj světe“. Já jsem u svého snu vytrval a dělal pro to vše, nedělá mi problém chodit spát až třeba ve 2 v noci a klidně 10 hodin denně programovat.
Ukázka z vývoje hry 3D miny
Takže chápu dobře, že nejsi jen programátor, ale částečně i grafik? Na jakých všech pozicích si tedy pracoval (myšleno za celou tvou vývojářskou kariéru)?
Co se týče herní vývojové scény, pracoval jsem pod jménem ODDT Games na vlastních projektech, pro společnost Lusorion Creatives jsem udělal 2 hry na Android a pak tedy 2 měsíce spolupracuji na projektu pražské firmy Xinity. Grafika není ani můj obor, ani můj koníček. Učil jsem se dělat grafiku a dělal jsem ji jen proto, že jsem musel. Jinak bych nikdy nic nevydal. Nikdo by se mnou nechtěl spolupracovat, kdybych už neukázal nějaké zkušenosti a předpoklady.
Na webu aktuálně prezentuješ 5 projektů. Pracoval si na nich v týmu či to všechno jsou pouze one-man-shows?
Rozhodně je to převážně moje práce. Pokud se budeme bavit o konkrétních projektech, Project Cyrcloid, Asteroid Avoider a WormWar jsou čistě mé projekty bez cizí pomoci. Ostatní 2 projekty (Ufolab a Crystaloids) jsou po programové stránce mé projekty a s grafikou mi pomáhal skvělý grafik, který se mi ozval na základě právě mých tutoriálů, kde jsem žádal o grafickou výpomoc. Asteroid Avoider musel být prozatím stažen z Google Play, protože Atari mi napsali výhružný email, že mě budou trestně stíhat, protože název „Asteroid Avoider“ se prý moc podobá jejich „Asteroids“.
Na čem aktuálně pracuješ?
Dost času mi zkonzumuje Praha a vysoká škola, ale přesto jsem se pustil hned do 2 projektů. Není to žádné tajemství, o všem se dá informovat na mé FB stránce. Aktuálně dělám tedy 3D hledání min, tedy prohledávání krychle, ne čtverce. Druhý projekt je založen na hře, kterou hraji se svou malou sestrou. Máme každý jednu barvu víček a cvrnkáním do svých se snažíme vytlačit toho druhého z herního kruhu. Je to super zábava, ale chybí mi tam možnost, že každé víčko bude představovat hrdinu, který bude mít vlastní vlastnosti (například hmotnost, velikost, odrazivost, tření). Tak jsem se rozhodl to naprogramovat pro Android.
Navštěvuješ nějaké weby či fóra pro vývojaře?
Nic pravidelného, spíš když potřebuju nějakou radu, tak zagoolim a většinou mě to hodí na oficiální Unity fórum, popřípadě klasiky jako stackoverflow, codeproject. Jinak sleduji ostatní vývojáře v akci na několika stránkách na FB (zejména Indie Game Developers). Nějaké seznamy videí se dnes s fanouškovskou komunitou také dají brát jako fórum, takže za mě mohu doporučit youtubery quill18 a Brackeys
Taková možná hloupá otázka: hraješ hry? Které patří mezi tvé nejoblíbenější? A jak by ses celkově vyjádřil k nynější herní scéně?
No dříve jsem propařil noci a to zejména Call of Duty, Mafii. Nějakou dobu teď zkouším betu hry Nosgoth. Nicméně, poslední dobou mi nezbývá na hraní moc času, takže si jednou za čas dám Call of Duty Modern Warfare 2. Nejsem příznivcem novějších dílů, kde se mapy jsem zmenšují a je to jenom fuj fuj akce, která nemá smysl (jsem sniper a když vás někdo zvládne devítkou trefit přes celou mapu, má cenu být sniper?). Co se týče nynější herní scény, líbí se mi, že jdou na povrch nové a nové Indie hry. Je to zvláštní, vzhledem k tomu, že je to má konkurence, ale oceňuji nové nápady. Nekupuji hry od velkých korporací, protože je nehodlám podporovat, raději ty indie hry, kterých je ale dost na zkoušení.
„Myslím si, že C# programátora naučí vše, co potřebuje znát“
Na svém webu píšeš, že tvoříš téměř zásadne v C#. Zkoušel si i nějaké jiné jazyky?
Zkoušel jsem C a Javu. C mi přijde zbytečně „od píky“. Proč nepoužívat jiný nástroj, který byl vytvořen, aby nám zjednodušil práci? Vývoj hry v C (spíš se tedy bavme o C++) trvá obvykle mnohonásobně déle. Javu jsem si znepřátelil právě na střední. Ve většině se podobá C#, jen má nevýhodu, že se občas člověk neví, co od ní má čekat, protože na přesně popsaný příkaz udělá chybu nebo něco úplně jiného. C# je proto moje no.1 a další jazyky jako PHP, JavaScript, PL/SQL se mi nechce skoro ani zmiňovat. I když je fakt, že PHP jsem využil několikrát pro komunikaci Unity s mou serverovou databází (například Highscore tabulky atd). Stejně ho ale nemám rád (smích)
Takže kdyby si mohl své rozhodnutí změnit, asi bys tak neučinil, že?
Rozhodně bych neměnil, dokonce jsem přemýšlel, že si nechám vytetovat tribal ve tvaru C# (smích)
Z jakého důvodu je C# tak populární?
Těžko říct, je super, komu by se nelíbil? (smích)
A ještě jedna ukázka z vývoje
Myslíš si, že je C# vhodný i pro začátečníky nebo by měli zvolit něco lehčího (např. Luu či Python)?
Jelikož jsem se nesetkal ani s Luou ani Pythonem, nemůžu tvrdit, jestli jsou jednodušší. Nicméně si myslím, že C# programátora naučí vše, co potřebuje znát. Nový C# přinese ještě hezčí zápisy některých funkcionalit, což se dokonale hodí do algoritmizace, což je jistě jedna z nejvýznamnějších částí programování. Když se budeme bavit o OOP (objektově orientovaném programování), je to ideální. Nejlepší je stejně začít se učit techniku OOP obecně bez jazyka a kódu. Většina lidí pak nechápe objektové modely, návrhové vzory. Doporučuji nastudovat UML a základy dědění v C#
Je C# nejvhodnějším jazykem pro práci s Unity nebo je zde ještě jazyk, se kterým se Unity pracuje o něco lépe?
Je to věc názoru. Někdo používa JavaScript, někdo C#. Používá se víceméně stejně až na drobnou syntaxi, ale tam jde spíše o zvyk. Více využívaný je C#, takže si rozhodně není na co stěžovat. Ještě je podporovaný jazyk Boo, ale ten jsem nikdy ještě ani neviděl.
„Unity vyhrálo kvůli tomu, že podporuje C#. Má přívětivé ovládání a dost materiálů, ze kterých se dá čerpat. Jasná volba :)“
Nyní se ale přesuňme k tomu hlavnímu – Unity. Kdy si se s Unity poprvé setkal?
Jsou to asi 4 roky. Dělal jsem na školním herním projektu se spolužákem v XNA. Pak jsem se snažil najít jednodušší cestu, abych stihl to samé co on udělat v menším čase. Projekt se tak úplně nezdařil, ale u Unity už jsem zůstal.
Co tě na Unity nejvíce zaujalo, že si tomu začal věnovat?
Rozhodoval jsem se mezi Unity a UDK. Unity vyhrálo kvůli tomu, že podporovalo C#. Mělo přívětivé ovládání a dost materiálů, z čeho čerpat. Jasná volba 🙂
Ještě než se budeme Unity více zabývat, jak bys pro naprostému laikovi vysvětlit pojem „herní engine“?
Řekl bych, že se to dá nazvat souhrnem již naprogramovaných knihoven, aby vývojář nemusel řešit fyziku a další funkce, které jsou ve většině her potřeba.
Lze o Unity říct, že je to skládačka – tedy že vezmeš všechno co máš (3D modely apod), hodíš to sem a za pomoci herního kódu vše uvedeš v provoz?
S notnou dávnou programovacího umu to může být pravda, ale záleží na velikosti typu projektu. Viděl jsem dokonce projekty (např. nějakou FPS), která vznikla úplně bez vlastního kódu.
S jakými problémy ses jako začátečník potýkal? Co je (může být) pro začátečníky největším problémem?
Spousta vývojářů podceňuje matiku a pak se na moc dlouho zastaví u rotačních skriptů nebo u pohybu kamery pomocí skriptu. 3D matika a celkově matika je dost důležitá věc a dost lidí si to neuvědomuje. Dalším problémem je optimalizace kódu. Když se někdo snaží vytvořit tisíc objektů za sekundu, je jasné, že hra půjde zpomaleně nebo bude padat. Poslední věcí, kterou bych zmínil (problém jsem s tím neměl, ale spousta lidí okolo ano), že nechápou herní smyčku (konkrétně v Unity, že se Update() volá průměrně po 0.02 sekund a někdo tam pak provádí operace, které stačí ve skutečnosti spočítat jednou a ne 50x za sekundu)
První z videotutoriálů pro ty, co chtějí tvořit hry na Android v Unity
Četl jsem, že v Unity můžeš i vytvářet animace. Můžeš mi jen ve zkratce vysvětlit, jak to funguje? A nebylo by jednodušší to dělat v programu přímo tomu určenému než v Unity?
Možné to je, ale jen na úrovni modelu. Když uvedu na příkladu, pokud máme jednolitý objekt postavy (bez rigu a podobných věcí, v tomhle odvětví se moc nevyznám – to je důvod, proč mé objekty v 3D hrách byly tak jednoduché – kulička a stíhačka), v Unity ho můžeme jen zvětšovat, zmenšovat, rotovat, posouvat, ale nebude hýbat jednotlivými prsty atd. (toto tvrzení vyvrací poměrně nový způsob animace Mecanim, kdy objekt postavy hodíte na nějaký předvytvořený bone systém a rozhýbe se vlastně sám, jak řikám, viděl jsem to, líbilo se mi to, ale neznám to).
Dá v Unity něco vytvořit bez toho, abys napsal jediný řádek kódu? Nebo každý, kdo to chce nějakým způsobem používat musí umět programovat?
Nejsem si jistý. Určitě takhle nějak navrhnout nějaké typy aplikací půjdou, ale bylo by to asi strohé a bez základních věcí jako je třeba menu. A pravděpodobně by člověk musel mít stáhnutý nebo naimportovaný nějaký doplněk, protože například pohyb by asi bez kódu udělat nešel.
Na kterých pracovních pozicích v herním průmyslu lidé mohou používat Unity (např. zda jen programátoři či i jiní)?
Viděl jsem v něm i neherní projekty, například hodiny nebo výukové programy., takže bych to přímo asi nesváděl jen na herní průmysl. Nicméně s Unity pracují částečně i grafici (když zkouší novou grafiku), level designéři či audio artisti (kvůli testu zvuků). Vlastně asi všichni mohou využívat Unity, to je dle rozložení firmy
V Unity zavedli tzv. „Asset Store“, obchod s komponentami, z nichž některé jsou zdarma a některé jsou zase placené. Jako vývojář je můžeš využívat ve svých hrách či je naopak zde nahrávat. Jak je to u Tebe: koupil sis někdy nějaký „asset“? Nebo přispěl si nějakým?
Řekl bych, že ještě nejsem na takové úrovni, abych si vytvořil vlastní package. Koupil jsem si jeden a to Android Native, abych mohl využívat služby jako Android Billing, AdMob či Play Services (HighScore tabulky, achievementy). Hlavním důvodem ale bylo to, že je to propojený přes nějaké Java doplňky a ty bych dělat nechtěl
Co je aktuálně největší výhoda Unity? A co je naopak jeho největší „nevýhoda“?
Výhoda je určitě to, že je multiplatformní, je free verze, ze které jde i vydat hru. Pokud vím, většina ostatních enginů už ani toto nabídnout nemůže a bývá to drahé (CryEngine, Havoc). Asi rok zpátky právě šéf Unity Technologies uvolnil, že se z Unity dá dělat i apk a free to vydat i na Play Storu a celkově se to vztahuje i na ostatní mobilní platformy
Co se týče těch nevýhod, tak například narozdíl například od CryEnginu nemá tak kvalitní grafiku a nějaké funkce (například že CryEngine v závislosti na vzdálenosti zjednodushuje mash, to Unity neumí). Větší a kvalitnější projekty bývají problém
Jsi nějakým způsobem v kontaktu s komunitou Unity? Je dostatečně živá anebo spíše neexistuje?
Komunita je rozsáhlá a aktivní. Několikrát jsem se na ni obrátil s žádostí o radu a vždy se mi dostalo řádné pomoci. Jinak sleduji akorát novinky.
A jaká je podpora ze strany Unity Technologies?
Při crashi Unity lze odeslat bug report nebo nahlásit chybu přímo z Unity. Nikdy jsem to neměl potřebu použít a tedy nepoužil jsem to. Ale Unity se snaží tyto chyby opravovat pomocí dalších verzí.
V Epicu se začátkem roku rozhodli, že Unreal Engine učiní více přístupný i pro indie vývojáře, a tak snížili jeho cenu na velmi přijatelnou hodnotu (konkrétně měšíční poplatek 19 dolarů a 5% z výnosů). Proč by nyní indie vývojáři měli dát přednost Unity před UE?
Většinou to už tak moc není otázka ceny, ale spíše otázka dát/nedát peníze. UE má paušální poplatek a to je strašák pro týmy o velikosti toho mého.
Omezuje Tě Unity nějakým způsobem?
Občas mi chybí nějaká funkcionalita, ale většinou není problém si ji doprogramovat. Než vyšlo Unity 4.6, byl poměrně velký problém s tvořením GUI, ale to s příchodem 4.6 vymizelo.
„Začátečníkům bych nedoporučoval pouštět se do velkých projektů, je to jen ztráta času (například Azulgar)“
Jak vypadá takový proces tvorby hry?
Přijde nápad, naprogramuji základní myšlenku a když se mi to zpracování líbí, začne ta otravná stereotypní část: vytváření menu, vytváření grafiky na Google Play, řešení pidivychytávek (při zkoušení během vývoje si nevšimnete, že se něco může stát, protože testujete jen to, co právě děláte) a nejotravnější část je marketing.
Tvoříš hry jen na PC nebo i na jiné platformy?
Tvořím hry téměř výhradně pro Android a někdy nějaké testovací verze na web, abych to někomu mohl ukázat nebo tak něco.
Čím se liší vývoj hry na PC od vývoje hry pro Android?
Vývojář musí myslet na to, že mobil nemá takový výkon jako PC, takže je tím omezen a myslet na různé typy rozlišení, ale to se řeší i na PC, i když s tím zkušeností moc nemám.
Jak probíhá schvalovací proces na Google Play?
Těžko říct. Když dodržíte nějaké zásady (jako že brutální obsah nastavíte na vyšší věk – není to tam přímo na věk, nevzpomínám si jak to tam, je nějak na 4 typy podle pohoršujícího obsahu), neměl by být problém schválit cokoliv. Někdo se mi teda jednou ozval na tetris, že to je trademark. Takže co nejméně kopírovat a zvolit správně kategorii a mělo by být vše OK. Jinak proces je z vaší strany takový, že odešlete podepsanou .apk, přidáte popis, screeny a další důležité věci. Kontrola a zveřejnění Googlu trvá několik hodin
Máš nějakou zajímavou historku z vývoje? 🙂
Nejzajímavější bylo, když mi napsali Atari, jak už jsem zmiňoval. Pak když jsem spolupracoval s jedním grafikem, který sliboval a sliboval a za 2 měsíce neudělal vlastně nic 🙂 Z toho plyne ponaučení, že pokud neuvidíte práci v prvním týdnu, pravděpodobně se jí nedočkáte (smích)
Který žánr (či podžánr – např. Doomovka) je pro začínající vývojáře nejvhodnější?
Unity má spoustu návodů na FPS, takže se to dá brát jako dobrý start. Osobně bych upřednostňoval nějakou blbinku pro seznámení, postřehovky jsou na to docela fajn, logické hry. Klidně i ve 2D prostředí.
Jakým chybám by se měli začínající vývojáři vyvarovat?
Nepouštět se do velkých projektů hned na začátku, je to ztráta času.
Poslední otázka: máš nějakou radu pro začínající vývojáře?
Nebát se, skočit do toho. Nevzdávat to a pokud si nevíte rady, google je skvělý pomocník. Pokud jdete od začátku, YouTube je nejlepší učitel (někdy dokonce lepší než živý lidský učitel). Sám jsem nakoukal kolem 160 hodin tutoriálů pro Unity, 80 hodin na Bledner. A poslední rada: Pokud ještě nevíte, co opravdu chcete, máte jen dočasný programovací úlet, nevrážejte do toho prachy. Všude je materiálů dost.
Díky za rozhovor a přeji hodně štěstí do budoucna 🙂
Já děkuji 🙂