M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
}
w A| y < 5 4 23 1 0 / -. , )+ ( %&' $ # !"
Æ
Proces vývoje hry pro platformu Android ˇ B AKALÁ RSKÁ PRÁCE
Jan Klimeš
Brno, jaro 2014
Prohlášení Prohlašuji, že tato bakaláˇrská práce je mým puvodním ˚ autorským dílem, které jsem vypracoval samostatnˇe. Všechny zdroje, prameny a literaturu, které jsem pˇri vypracování používal nebo z nich cˇ erpal, v práci rˇ ádnˇe cituji s uvedením úplného odkazu na pˇríslušný zdroj.
Jan Klimeš
Vedoucí práce: doc. PhDr. Josef Prokeš, Ph.D. i
Shrnutí Cílem této bakaláˇrské práce je vytvoˇrit interaktivní hru pro mobilní platformu Android a popsat celý proces vývoje. To zahrnuje prvotní analýzu projektu (možnosti zvolené platformy, nástroje pro vývojáˇre, zpusoby ˚ implementace, téma aplikace), pˇrípravu podkladu˚ pro aplikaci a samotnou implementaci a testování. Práce rovnˇež pˇriblíží zpusoby ˚ distribuce aplikací po jejich dokonˇcení ke koncovým uživatelum. ˚
ii
Klíˇcová slova Android, proces vývoje hry, game engine, Unity, mobilní hra, bowling, PhysX, Google Play.
iii
Podˇekování Rád bych podˇekoval doc. PhDr. Josefu Prokešovi, Ph.D. za cenné rady, vˇecné pˇripomínky a vstˇrícnost pˇri konzultacích a vypracování bakaláˇrské práce. Dále bych chtˇel podˇekovat následujícím lidem za jejich úˇcast v testování aplikace: Mgr. et Bc. Eva Biˇcanová, Petr Gibiš.
iv
Obsah 1 2
3
4 5
6
7
Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . Zvolená platforma . . . . . . . . . . . . . . . . . . 2.1 Historie . . . . . . . . . . . . . . . . . . . . . . 2.2 Možnosti pro vývojáˇre . . . . . . . . . . . . . 2.2.1 SDK . . . . . . . . . . . . . . . . . . . 2.2.2 NDK . . . . . . . . . . . . . . . . . . . 2.2.3 Herní vývojáˇrské nástroje . . . . . . . 2.2.3.1 Unreal Engine . . . . . . . . 2.2.3.2 Unity . . . . . . . . . . . . . Pˇredstavení hry . . . . . . . . . . . . . . . . . . . . 3.1 Téma hry . . . . . . . . . . . . . . . . . . . . . 3.2 Vlastnosti doprovodné aplikace . . . . . . . . Proces vývoje hry . . . . . . . . . . . . . . . . . . . Pˇredprodukˇcní fáze . . . . . . . . . . . . . . . . . 5.1 Tvorba prototypu . . . . . . . . . . . . . . . . 5.2 Design dokument . . . . . . . . . . . . . . . . Produkˇcní fáze . . . . . . . . . . . . . . . . . . . . 6.1 Definice základních pojmu˚ . . . . . . . . . . . 6.2 Tvorba 3D modelu˚ . . . . . . . . . . . . . . . 6.3 Nastavení prostˇredí herního enginu . . . . . 6.4 Pˇríprava prefabrikátu˚ . . . . . . . . . . . . . . 6.5 Herní scény . . . . . . . . . . . . . . . . . . . 6.6 Implementace . . . . . . . . . . . . . . . . . . 6.6.1 Návrhový vzor . . . . . . . . . . . . . 6.6.2 Obsluha kuželek . . . . . . . . . . . . 6.6.2.1 Detekce sražení kuželky . . 6.6.3 Obsluha bowlingové koule . . . . . . 6.6.3.1 Ovládání koule . . . . . . . . 6.6.4 Obsluha kamery . . . . . . . . . . . . 6.6.5 Vytvoˇrení hlavního menu . . . . . . . 6.6.6 Pˇridání herní logiky . . . . . . . . . . 6.6.6.1 Reprezentace kola hry . . . . 6.6.6.2 Prubˇ ˚ eh hry . . . . . . . . . . 6.6.7 Prvky uživatelského rozhraní ve hˇre Postprodukˇcní fáze . . . . . . . . . . . . . . . . . . 7.1 Testování . . . . . . . . . . . . . . . . . . . . . 7.2 Distribuce aplikace . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 2 2 3 3 3 3 4 4 6 6 6 8 10 10 11 13 13 14 16 16 18 18 18 20 20 21 21 22 22 24 24 24 25 26 26 26 v
8
7.2.1 Služba Google Play . . . . . . . . . . . . . . . . . . . Závˇer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27 29
vi
1 Úvod Mobilní hry s koˇreny sahajícími do poloviny 90. let patˇrí mezi nejmladší odvˇetví videoherního prumyslu. ˚ Zpoˇcátku se jednalo o jednoduché hry typu Tetris nebo Had, který se od roku 1997 objevoval na vˇetšinˇe zaˇrízení znaˇcky Nokia. S pˇríchodem chytrých telefonu˚ (smartphonu) ˚ a zlepšováním výkonu hardwaru dostupného v zaˇrízeních se kvalita mobilních her zaˇcala zvyšovat. Jedním z nejvˇetších milníku˚ bylo v roce 2008 zpˇrístupnˇení služby Android Market, která novˇe umožnila vývojáˇrum ˚ jednoduchou distribuci her a aplikací urˇcených pro platformu Android. Spousta vývojáˇrských studií se díky tomuto zaˇcala pˇreorientovávat na mobilní trh a z vývoje her pro telefony se stala populární komodita. Vývojem herních aplikací pro platformu Android se budeme zabývat v této práci. V textu si podrobnˇe popíšeme proces vývoje her pro platformu Android a všechny cˇ ásti procesu budeme demonstrovat pˇri vytváˇrení doprovodné herní aplikace, která bude sloužit jako praktický výstup bakaláˇrské práce. V následující kapitole si uvedeme historii a základní údaje zvolené platformy. Pˇri popisu možností vývoje aplikací pro Android se zamˇerˇ íme na nástroje pro tvorbu her. Tˇretí kapitola bude vˇenována pˇredstavení vytvárˇ ené hry a uvedení základních požadavku, ˚ jejichž splnˇení budeme od aplikace oˇcekávat. V kapitole cˇ íslo 4 si rozebereme samotný proces vývoje her a uvedeme si jeho dˇelení do základních fází. Následující tˇri kapitoly budou rozebírat jednotlivé fáze procesu a pokryjí vývoj doprovodné aplikace od poˇcáteˇcního návrhu, pˇres implementaci, až po testování a distribuci aplikace.
1
2 Zvolená platforma Android je platforma s operaˇcním systémem (OS) založeným na linuxovém jádru. Jedná se o open-source software, což znamená, že zdrojový kód Androidu je volnˇe dostupný a je možno jej modifikovat a dále šíˇrit. Tímto se odlišuje od konkurenˇcních mobilních operaˇcních systému, ˚ jako napˇríklad iOS od spoleˇcnosti Apple, cˇ i Windows Phone od spoleˇcnosti Microsoft. V souˇcasné dobˇe je Android nejrozšíˇrenˇejší mobilní operaˇcní systém na svˇetˇe.
Obrázek 2.1: Celosvˇetový podíl mobilních operaˇcních systému˚ v období bˇrezen 2014 [12] Danou platformu jsem pro vývoj herní aplikace v této bakaláˇrské práci zvolil díky rozšíˇrenosti OS Android ve svˇetˇe, faktu, že Android je opensource software, a na základˇe pˇredchozích osobních zkušeností s vývojem pro tuto platformu.
2.1
Historie
Vývoj OS Android [1, s. 2] byl zahájen v roce 2003 firmou Android Inc, kterou v roce 2005 skoupila spoleˇcnost Google. Veˇrejnosti byl Android po2
2. Z VOLENÁ PLATFORMA prvé pˇredstaven v roce 2007 a první telefon s tímto operaˇcním systémem byl uveden na trh v roce 2008. Bˇehem následujících let vydal Google nˇekolik nových verzí OS, pˇriˇcemž každá verze pˇridávala do systému novou klíˇcovou funkcionalitu1 . Zatím poslední verze OS Android v dobˇe psaní této práce je Android 4.4.2.
2.2
Možnosti pro vývojáˇre
2.2.1
SDK
Software development kit (SDK) [1, s. 10] je základní vývojáˇrský nástroj pro tvorbu aplikací na Android. Nejduležitˇ ˚ ejší souˇcástí SDK jsou knihovny jazyka Java, které obsahují specifické API2 pro aplikace urˇcené na OS Android. Java knihovny dostupné na Androidu jsou témˇerˇ totožné s Java Standard Edition (chybí napˇr. knihovny pro Abstract Window Toolkit a Swing). SDK mimo jiné dále obsahuje dokumentaci k API, ukázkové rˇ ešení aplikací, debugger cˇ i emulátor pro testování vytvoˇrených aplikací. 2.2.2
NDK
Android native development kit3 (NDK) umožnuje ˇ programátorum ˚ psát kód aplikace pro Android v jazycích C cˇ i C++. Použití NDK je tedy vhodné pro aplikace nároˇcné na výkon procesoru (napˇr. simulace fyzikálních výpoˇctu). ˚ 2.2.3
Herní vývojáˇrské nástroje
Pro jednodušší vývoj herních aplikací na OS Android je možné použít nˇekterý z dostupných herních enginu˚ (game engine). Jedná se o frameworky tvoˇrící jádro hry, které dávají vývojáˇrum ˚ k dispozici ruzné ˚ komponenty potˇrebné pro vývoj herních aplikací. Mezi tyto komponenty mužeme ˚ zaˇradit napˇr. knihovny pro simulaci fyziky ve hˇre, možnost importu a používání 3D objektu˚ a zvukových stop v aplikaci cˇ i podporu pro animaci herních objektu. ˚ Kvalitní game engine obsahuje i pro své potˇreby speciálnˇe navržené IDE4 . 1. napˇr. verze 1.6 pˇridala podporu pro zobrazení aplikace na obrazovkách s rozdílným rozlišením; verze 2.0 pˇridala podporu pro obrazovky schopné zpracovávat více dotyku˚ zárovenˇ atd. 2. application programming interface 3. http://developer.android.com/tools/sdk/ndk/index.html 4. integrated development environment
3
2. Z VOLENÁ PLATFORMA Zde si uvedeme pouze nejznámˇejší pˇríklady herních enginu˚ relevantní pro platformu Android. 2.2.3.1 Unreal Engine Unreal Engine5 od spoleˇcnosti Epic Games je jedním z nejvýznamnˇejších multiplatformních herních enginu˚ vubec. ˚ Poprvé byl použit ve hˇre Unreal v roce 1998. Unreal Engine je komerˇcní herní engine, za který se platí formou pˇredplatného. Zdarma je vývojáˇrum ˚ dostupná pouze odnož tˇretí verze enginu nazvaná Unreal Development Kit. Ta ale bohužel neobsahuje možnost exportu aplikace na Android, takže pro vývoj na tuto platformu je potˇreba používat placenou verzi. 2.2.3.2 Unity Unity je další zástupce multiplatformních herních enginu. ˚ Vyvíjen je spoleˇcností Unity Technologies a dostupný ve dvou verzích: proprietární verzi Unity Pro a bezplatné variantˇe Unity. Bezplatná verze enginu postrádá nˇekterou funkcionalitu Unity Pro (napˇr. pokroˇcilý path-finding, vykreslování stínu˚ u nˇekterých typu˚ osvˇetlení cˇ i pokroˇcilé audio filtry) a puvodnˇ ˚ e umožnovala ˇ export aplikace pouze pro platformy Windows, OS X a Linux.
Obrázek 2.2: Vývojové prostˇredí herního enginu Unity
5.
https://www.unrealengine.com/
4
2. Z VOLENÁ PLATFORMA V kvˇetnu 2013 byla pro bezplatnou verzi uvolnˇena podpora pro export aplikací na platformy iOS, Windows Phone, BlackBerry a pro nás relevantní Android6 . Bezplatnou verzi herního enginu Unity použijeme pro vytvoˇrení doprovodné aplikace k této bakaláˇrské práci. Pro tento engine jsem se rozhodl z duvodu ˚ možnosti exportu aplikace pro platformu Android zdarma a na základˇe pˇredchozích zkušeností s enginem.
6. http://blogs.unity3d.com/2013/05/21/putting-the-power-of-unity-in-the-hands-ofevery-mobile-developer/
5
3 Pˇredstavení hry 3.1
Téma hry
Praktickou cˇ ástí této práce bude vytvoˇrení interaktivní hry simulující halový sport bowling. V tomto sportu [13] mají hráˇci za cíl srazit co možná nejvíce z deseti kuželek umístˇených na konci dráhy. Uˇcinit tak mohou hozením bowlingové koule do dráhy. Historie bowlingu Tento sport má své údajné koˇreny [14] až ve starovˇekém Egyptˇe, ovšem blíže podobˇe, v jaké ho známe dnes, se objevuje až ve stˇredovˇeku v Anglii. Výrazné zmˇeny prodˇelal bowling až ve 20. století, kdy s pˇríchodem nových technologií bylo možné nahradit do té doby dˇrevˇené bowlingové koule gumovými (pozdˇeji plastovými). Bˇehem druhé poloviny 20. století byl pˇredstaven první sériovˇe vyrábˇený stroj pro sbˇer a umist’ování kuželek a bowling získával vˇetší popularitu díky televizním pˇrenosum ˚ z bowlingových turnaju. ˚ Pravidla bowlingu Pravidla [15] bowlingu jsou pˇrímoˇcará a dají se jednoduše zachytit pomocí algoritmu. Hra sestává z deseti kol a v každém kole má hráˇc dva hody na sražení kuželek (kuželky sražené v prvním hodu již v druhém nefigurují). Pokud hráˇc srazí všech deset kuželek v prvním hodu, jedná se o tzv. strike a dané kolo pro hráˇce konˇcí. V obou hodech následujícího kola se hráˇci pˇripoˇcítá dvojnásobek sražených kuželek. V pˇrípadˇe, že hráˇc srazí deset kuželek bˇehem druhého hodu, jedná se o spare a body z prvního hodu v následujícím kole se hráˇci zdvojnásobí. Dva po sobˇe jdoucí striky se nazývají double strike, v pˇrípadˇe tˇrí striku˚ mluvíme o triple striku. V pˇrípadˇe, že se hráˇci v posledním kole podaˇrí dosáhnout striku, získává další dva hody. Pokud hráˇc dosáhne v posledním kole spare, získává ještˇe jeden (tˇretí v daném kole) hod.
3.2
Vlastnosti doprovodné aplikace
Herní aplikace, kterou má tato práce za cíl vytvoˇrit, bude mít vlastnosti specifikované v následujících sekcích. 6
ˇ 3. P REDSTAVENÍ HRY
Simulace reálného chování herních objektu˚ Veškeré herní objekty budou co nejvˇernˇeji kopírovat vlastnosti svých reálných pˇredloh. Díky použití herního enginu Unity (viz. sekce 2.2.3.2) máme pro simulaci fyziky ve hˇre k dispozici knihovnu PhysX1 od spoleˇcnosti NVIDIA. Nejvˇetší duraz ˚ na reálné chování je kladen na objekty kuželky (nastavení reálných proporcí [15] - rozmˇery, váha a tˇežištˇe) a bowlingové koule (nízký souˇcinitel tˇrení - koule se nesmí na dráze zastavit). Dráha musí mít taktéž nízký souˇcinitel tˇrení (povrch skuteˇcné bowlingové dráhy je naolejovaný). Implementace pravidel bowlingu Aplikace musí korektnˇe implementovat pravidla bowlingu uvedená v sekci 3.1. Uživatelské rozhraní Hra bude disponovat uživatelským rozhraním obsahujícím hlavní menu a prvky informující hráˇce o prubˇ ˚ ehu hry. Perzistentní ukládání nejvyšších dosažených skóre Nejlepší výsledky hráˇce budou ukládány do pamˇeti mobilního zaˇrízení a bude je možné zobrazit z hlavního menu.
1.
http://www.geforce.com/hardware/technology/physx
7
4 Proces vývoje hry Vývoj herní aplikace (z anglického termínu game development process) je komplexní proces [2, s. 352-394], který muže ˚ (obzvláštˇe u AAA titulu˚ 1 ) trvat nˇekolik let a zahrnovat práci stovek lidí. Ve vývojáˇrském týmu existuje nˇekolik rolí (návrháˇri, programátoˇri, umˇelci, manažeˇri, producenti atd.), z nichž každá je duležitá ˚ pro vyprodukování kvalitní výsledné hry. S rostoucím výkonem mobilních zaˇrízení se hry vyvíjené pro platformy jako Android zaˇcínají více podobat jak po obsahové, tak vizuální stránce hrám dˇríve urˇceným pouze pro speciální herní konzole a PC. Zvyšující se komplexnost mobilních her muže ˚ vyžadovat pro jejich tvorbu mnohacˇ lenné vývojáˇrské týmy (napˇr. vydavatelství Gameloft zamˇestnává týmy vývojáˇru˚ cˇ ítající pˇres 5000 osob2 ). Aplikace doprovázející tuto práci bude svým rozsahem odpovídat práci jednoho vývojáˇre. Proces vývoje aplikace si mužeme ˚ rozdˇelit do následujících tˇrí základních fází.
Obrázek 4.1: Graf procesu vývoje hry znázornující ˇ dˇelení do základních fází [16]
Pˇredprodukˇcní fáze Jedná se o poˇcáteˇcní fázi, ve které probíhá plánování a pˇríprava pro tvorbu hry. V pˇrípadˇe, že má být hra vyvíjena víceˇclenným týmem, vybírá producent v této fázi vývojáˇre, kteˇrí budou na aplikaci pracovat. Pˇredprodukˇcní 1. Jedná se o špiˇckové tituly, které jsou cˇ asto ještˇe pˇred svým vydáním mediálnˇe známé a u herního publika se tˇeší velké oblibˇe. 2. http://www.gameloft.com/corporate/company/mission
8
4. P ROCES VÝVOJE HRY fáze vývoje pro doprovodnou aplikaci je rozvedena v kapitole 5. Pˇredprodukci muže ˚ pˇredcházet fáze vývoje konceptu. Tato fáze slouží pro zachycení prvotního nápadu na vytváˇrenou hru. Koncept muže ˚ být vytváˇren pouze producentem, pˇrípadnˇe malým týmem vývojáˇru. ˚ Výsledkem návrhu je dokument vystihující podstatu hry (concept document ) [2, s. 352]. Doprovodná aplikace k této práci bude jednoduchá, a proto koncept sloucˇ íme s pˇredprodukˇcní fází.
Produkˇcní fáze V této fázi [2, s. 358] vzniká samotná hra. Umˇelci a návrháˇri vytváˇrejí grafické prvky hry (modely, textury, prvky uživatelského rozhraní) a podobu jednotlivých úrovní hry, a programátoˇri píší kód aplikace. Tato cˇ ást vývoje trvá obvykle nejdéle. Produkˇcní fáze pro doprovodnou aplikaci je popsána v kapitole 6.
Postprodukˇcní fáze V poslední fázi [2, s. 365] je hra již dokonˇcena a probíhá testování aplikace. Pˇri testování (interní nebo urˇcené pro veˇrejnost) jsou odhalovány chyby ve hˇre, které je pˇred distribucí potˇreba odstranit. Distribuce mobilních her probíhá elektronickou formou (hry vyvíjené pro PC a herní konzole jsou typicky vydávané i na standardních nosiˇcích jako DVD a Blue-ray) pˇres webové portály k tomuto úˇcelu urˇcené (pˇríklad si uvedeme v sekci 7.2). Postprodukˇcní fáze nekonˇcí vydáním hry (pokud se tak vydavatel nerozhodne). Po vydání jsou bˇežnˇe opravovány chyby, které nebyly odhaleny pˇri testování. Hru je také možné rozšiˇrovat o nový obsah, který muže ˚ být uvolnˇen formou bezplatných aktualizací aplikace, nebo jako bonusové materiály dostupné za poplatek. Více si o postprodukˇcní fázi uvedeme v kapitole 7.
9
5 Pˇredprodukˇcní fáze Pˇred zahájením práce na samotné hˇre si vytvoˇríme specifikaci aplikace. V kapitole 3 jsme si již uvedli základní údaje o hˇre. V následujícím textu tyto údaje rozvedeme a popíšeme tvorbu hratelného prototypu aplikace.
5.1
Tvorba prototypu
Vytvoˇrením hratelného prototypu [3, s. 132-133] aplikace máme možnost vyzkoušet, jak by mohl vypadat nápad pro chystanou hru pˇrenesený do praxe. Prototyp by mˇel demonstrovat základní funkcionalitu aplikace, což je v našem pˇrípadˇe manipulace s bowlingovou koulí (simulace hodu koulí) a interakce koule a kuželek. U nˇekterých her je vhodné vytvoˇrit fyzickou verzi prototypu pˇredcházející softwarové variantˇe. Fyzické prototypy mohou být vytvoˇreny z papíru, herních karet cˇ i miniatur herních modelu. ˚ Fyzický prototyp není pro námi vytváˇrenou hru zapotˇrebí. Pro tuto bakaláˇrskou práci byly vytvoˇreny dva hratelné prototypy popsané v následujícím textu. První prototyp aplikace K vývoji první verze prototypu hry byl použit 3D engine jPCT-AE1 . Jedná se o framework napsaný v jazyce Java a je navržen speciálnˇe pro použití na platformˇe Android. Pro simulaci fyziky ve hˇre je engine propojen s knihovnou jBullet2 . Pˇrestože prototyp prokazuje požadovanou funkcionalitu, na zvolenou platformu klade pˇríliš vysoké nároky. Aplikace je schopna vykreslovat zhruba 20 snímku za vteˇrinu (FPS3 ). Z tohoto duvodu ˚ nejsou zvolené technologie (pˇredevším knihovna jBullet z duvodu ˚ vysoké nároˇcnosti) vhodné pro implementaci aplikace. Druhý prototyp aplikace Druhá verze prototypu je vytvoˇrena pomocí herního enginu Unity. Jádro enginu je napsáno v programovacím jazyce C++, což zajišt’uje lepší výkon aplikace (obzvláštˇe pˇri simulaci fyziky) na zvolené platformˇe. 1. 2. 3.
http://www.jpct.net/jpct-ae/index.html http://jbullet.advel.cz/ frames per second
10
ˇ ˇ 5. P REDPRODUK CNÍ FÁZE
Obrázek 5.1: Dvˇe verze prototypu hry Prototyp oproti starší verzi vykazuje vyšší poˇcet snímku˚ za vteˇrinu a implementuje nové možnosti ovládání (pˇred vhozením koule do dráhy je možné kouli horizontálnˇe posunovat). Alternativní proces vývoje pomocí prototypu˚ Pro tvorbu her je místo dˇelení procesu na pˇredprodukˇcní, produkˇcní a postprodukˇcní fáze možné pojmout vývoj jako sérii iterativních prototypu˚ [2, s. 367]. Pˇri tomto postupu se opakují následující tˇri kroky vývoje: 1.
analýza problému
2.
vývoj prototypu
3.
evaluace prototypu (a pˇrípadný návrat k analýze a následná modifikace prototypu)
Uvedený postup uvádíme pouze jako možnou alternativu námi zvoleného procesu vývoje. V této bakaláˇrské práci se budeme rˇ ídit dˇelením do tˇrí fází popsaných v kapitole 4.
5.2
Design dokument
Bˇehem pˇredprodukˇcní fáze vzniká dokument designu (game design document, zkrácenˇe GDD) [2, s. 391]. GDD obsahuje širokou škálu informací od použitého herního enginu, pˇres seznam herních úrovní, až po uživatelské 11
ˇ ˇ 5. P REDPRODUK CNÍ FÁZE
rozhraní. Rozsah dokumentu se pohybuje mezi 50 a 200 stranami. Bˇehem produkˇcní fáze slouží GDD jako hlavní referenˇcní materiál pro vývojáˇre. V této práci nebudeme vytváˇret GDD jako samostatný dokument, nýbrž zaˇcleníme ho pˇrímo do textu. Rozsah bude odpovídat nároˇcnosti vytváˇrené aplikace. V následujících sekcích si popíšeme jednotlivé cˇ ásti GDD doprovodné aplikace. Game engine Informace o použitém herním enginu Unity jsme si již uvedli v sekci 2.2.3.2. Herní úrovnˇe Hra bude obsahovat pouze jednu herní úrovenˇ (nebo také level hry), a to místnost s šesti bowlingovými dráhami. Aktivní bude pouze jedna dráha, zbylé budou sloužit pouze jako dekorace (reálná bowlingová centra mají vˇetšinou více drah vedle sebe). Seznam herních objektu˚ Základní použité herní objekty jsou bowlingová dráha, kuželka a bowlingová koule. Dráha bude mít po stranách žlábky pro zachycení koule. Na konci dráhy bude umístˇeno zaˇrízení pro sbˇer a stavˇení kuželek. Uživatelské rozhraní Hra bude disponovat plnohodnotným hlavním menu, které bude sloužit jako rozcestník pro jednotlivé cˇ ásti aplikace. Z hlavního menu bude možné zahájit novou hru, zobrazit nejvyšší dosažené skóre a nápovˇedu, cˇ i ukonˇcit aplikaci. U probíhající hry bude možné zobrazit herní menu, a tím zárovenˇ pozastavit hru. Z herního menu bude možnost navrátit se zpˇet do hry, popˇrípadˇe ukonˇcit souˇcasnou hru a zobrazit hlavní menu. Pˇri probíhající hˇre bude na obrazovce zaˇrízení zobrazeno následující: 1.
jméno hráˇce (zadáváno pˇred spuštˇením hry)
2.
dosažené skóre ze souˇcasné hry
3.
tabulka obsahující shrnutí skóre ze všech deseti kol hry
4.
tlaˇcítko pro pozastavení hry a zobrazení herního menu
12
6 Produkˇcní fáze V této kapitole si popíšeme samotnou tvorbu hry. Pˇri práci budeme vycházet ze specifikace aplikace uvedené v pˇredchozí kapitole. Nejprve si popíšeme postup pˇri vytváˇrení prvku˚ tvoˇrících vizuální stránku hry (3D modely, textury), následnˇe pˇrevod a úpravy tˇechto prvku˚ v herním enginu (prefabrikáty), a poté tvorbu zdrojového kódu hry.
6.1
Definice základních pojmu˚
Nejdˇríve si definujeme pojmy, které budeme v této kapitole používat pˇri práci s herním enginem. Scéna Scéna (z anglického termínu scene) [6, s. 19] tvoˇrí urˇcitou oblast hry a obsahuje cˇ ást herního obsahu. Každá hra musí obsahovat alesponˇ jednu scénu. Typické využití scén je separace jednotlivých herních úrovní (levelu˚ hry). Herní objekt Pojmem herní objekt (game object ) [6, s. 19-20] myslíme jakýkoliv objekt nacházející se v nˇejaké herní scénˇe. Muže ˚ se jednat o importované modely, svˇetla, kamery nebo prázdné objekty. Objekty se skládají z komponent. Komponenta Komponenty [6, s. 20] jsou stavební prvky herních objektu. ˚ Všechny herní objekty obsahují alesponˇ jednu komponentu, a to údaje o transformaci objektu (komponenta transform). Tato komponenta obsahuje údaje o pozici, rotaci a mˇerˇ ítku objektu. Jako další pˇríklady komponent si mužeme ˚ uvést tuhá tˇelesa (rigid bodies), komponenty pro detekci kolize s dalšími objekty (mesh colliders), materiály objektu˚ nebo skripty. Prefabrikát Prefabrikáty (prefabs) [6, s. 21] jsou pˇredpˇripravené herní objekty, u kterých je možné vytvoˇrit jejich instance za bˇehu programu. Prefabrikáty mohou obsahovat libovolné množství komponent se specifickým nastavením. Pro 13
ˇ 6. P RODUK CNÍ FÁZE
dosažení stejného výsledku bez použití prefabrikátu˚ by bylo nutné všechny komponenty nastavit a pˇripojit k objektu pomocí skriptu. ˚
6.2
Tvorba 3D modelu˚
Potˇrebné herní objekty jsme si již specifikovali v GDD. Pro objekty bowlingové dráhy a kuželky si vytvoˇríme grafické modely pomocí programu Cinema 4D1 . Zbývající objekty (bowlingová koule, stˇeny místnosti, ve které bude dráha umístˇena) jsou dostateˇcnˇe jednoduché a pro jejich reprezentaci postaˇcí grafická primitiva, která je možné vytvoˇrit pomocí herního enginu. Modely vytvoˇrené programem Cinema 4D je možné pˇrímo importovat do herního enginu Unity (pˇrí importu je automaticky provedena konverze do vhodného formátu). Importované modely si zachovají puvodní ˚ strukturu z programu Cinema 4D. Díky tomu mužeme ˚ jednotlivé cˇ ástí modelu˚ modifikovat nezávisle na sobˇe (animovat, aplikovat materiály atd.). Místo puvodních ˚ materiálu˚ vytvoˇrených v Cinema 4D použijeme materiály vytvoˇrené pomocí herního enginu (puvodní ˚ importované materiály neobsahují textury). Vytváˇrená hra je urˇcená pro mobilní platformu, a proto budou modely obsahovat co nejmenší poˇcet polygonu˚ (tzv. low poly model ), abychom zajistili nejvyšší možný výkon aplikace. U všech modelu˚ je také nutné dodržet správné mˇerˇ ítko (základní jednotka programu Cinema 4D je centimetr, zatímco mˇerˇ ítko herního enginu Unity je v metrech).
Model bowlingové dráhy Bowlingová dráha je nejsložitˇejší model ve hˇre. Hlavní plochu dráhy a žlábky po stranách tvoˇrí nˇekolik obdélníkových polygonu. ˚ Pásy oddˇelující od sebe bowlingové dráhy a zaˇrízení pro stavbu a sbˇer kuželek jsou vytvoˇreny polygonovým modelováním z primitivního modelu krychle. Pro hlavní plochu dráhy použijeme texturu dˇrevˇených desek2 . Zed’ za bowlingovou dráhou pokrývá textura zobrazená na obrázku 6.1. K této textuˇre si vytvoˇríme výškovou mapu, která pˇri kombinaci se základní texturou vytváˇrí iluzi plastiˇcnosti nápisu na textuˇre.
1. 2.
http://www.cinema4d.cz/ http://braddamy.deviantart.com/art/Wood-floor-144543981
14
ˇ 6. P RODUK CNÍ FÁZE
Obrázek 6.1: Textura zdi za bowlingovou dráhou
Obrázek 6.2: Model bowlingové dráhy vytvoˇrený programem Cinema 4D
15
ˇ 6. P RODUK CNÍ FÁZE
Model kuželky Kuželku budeme reprezentovat jednoduchým modelem vytvoˇreným pomocí rotace kˇrivky urˇcující tvar objektu.
6.3
Nastavení prostˇredí herního enginu
V kapitole 2 jsme si již uvedli, že Unity se rˇ adí mezi multiplatformní herní enginy. Z tohoto duvodu ˚ musíme vývojové prostˇredí Unity nastavit pro práci s platformou Android. Mobilní zaˇrízení vybavené akcelerometrem umožnují ˇ otoˇcení displeje telefonu podle polohy, v jaké je uživatelé drží. Proto musíme uvést, jaké režimy otoˇcení displeje bude naše hra podporovat. Pro naše potˇreby bude nejlepší možností orientace na výšku (tzv. portrét). Pˇri použití orientace na šíˇrku by kuželky na konci dráhy byly velmi malé. Protože chceme, aby hra zabírala plochu celé obrazovky, zvolíme možnost schování horní informaˇcní lišty operaˇcního systému Android. U aplikace je dále potˇreba nastavit identifikaˇcní balík, verzi aplikace a minimální vyžadovanou verzi operaˇcního systému Android. Naše hra bude schopna fungovat i na nejstarší dostupné verzi operaˇcního systému v Unity, kterou je Android 2.3.1 (verze API 9).
6.4
Pˇríprava prefabrikátu˚
Prefabrikáty si vytvoˇríme pro objekty, jejichž instance budeme vytváˇret dynamicky za bˇehu programu, nebo které potˇrebujeme sdílet mezi scénami. Bowlingová dráha Prefabrikát bowlingové dráhy vychází z modelu vytvoˇreného v sekci 6.2. Kromˇe samotného modelu a materiálu˚ obsahuje komponentu pro detekci kolizí s ostatními objekty. ˇ Cást modelu reprezentující zaˇrízení pro sbˇer shozených kuželek má navíc pˇripojenou komponentu pro animaci objektu. Této komponentˇe je možné pˇriˇradit animaˇcní klipy, kterými mužeme ˚ daný objekt rozpohybovat. V pˇrípadˇe sbˇeru kuželek se jedná o animaci shrnutí kuželek, které hráˇc v daném kole srazil. Automatický stavˇecˇ kuželek má taktéž pˇripojené animaˇcní klipy, a to pohyb zaˇrízení pˇri stavˇení kuželek na zaˇcátku kola a sbˇer nesražených kuželek na konci. 16
ˇ 6. P RODUK CNÍ FÁZE
Obrázek 6.3: Prefabrikát kuželky Místnost V GDD jsme si uvedli, že hra bude situována v místnosti s šesti bowlingovými dráhami. Tuto místnost použijeme i jako pozadí hlavního menu, a proto si pro ni vytvoˇríme prefabrikát. Základ tvoˇrí šest prefabrikátu˚ dráhy umístˇených vedle sebe. Stˇeny místnosti jsou reprezentovány primitivními objekty roviny, jež nám umožnuje ˇ vytváˇret herní engine. Zadní stˇena navíc obsahuje tˇri primitivní objekty krychle, na kterých je aplikován materiál s texturou ukázanou na obrázku 6.1. Kuželka Prefabrikát kuželky obsahuje kromˇe 3D modelu a materiálu i komponentu tuhé tˇeleso (rigidbody). Tato komponenta obsahuje údaje (hmotnost, tˇrení) potˇrebné pro simulaci fyzikálního chování. Dále prefabrikát obsahuje komponentu pro animaci objektu (spuštˇení a zvednutí kuželky zárovenˇ se stavˇecˇ em kuželek) a skript detekující sražení kuželky (skript bude detailnˇeji rozebrán v sekci 6.6). Komponenta pro detekci kolize se skládá z nˇekolika primitivních objektu, ˚ které se snaží napodobit tvar modelu kuželky.
Bowlingová koule Bowlingovou kouli si budeme reprezentovat primitivním objektem koule s výchozí komponentou pro detekci kolizí. Prefabrikát má dále pˇripojené komponenty tuhé tˇeleso a skript zprostˇredkující interakci s hráˇcem (vhození koule do dráhy, detekce pohybu koule). 17
ˇ 6. P RODUK CNÍ FÁZE
6.5
Herní scény
Pro vytvoˇrení hry nám budou staˇcit dvˇe scény. První scéna bude obsahovat hlavní menu aplikace, druhá samotnou hru. Obˇe scény budou založeny na prefabrikátu místnosti popsaném v sekci 6.4. Pˇrestože by bylo možné mít hru i hlavní menu v jedné scénˇe, jejich rozdˇelením docílíme lepší pˇrehlednosti.
6.6
Implementace
V herním enginu Unity probíhá tvorba veškerého kódu aplikace pomocí skriptu. ˚ Pro pˇridání skriptu do hry je potˇreba pˇriˇradit daný skript k nˇekterému hernímu objektu (možno i k prázdnému objektu) jako komponentu. Pro psaní skriptu˚ v Unity je možné vybrat si z programovacích jazyku˚ C# (použit pro tuto práci), Javascript a Boo (není podporován pro mobilní platformy). Skriptování v Unity Skript v herním enginu Unity je tˇrída, která je potomkem tˇrídy MonoBehaviour. MonoBehaviour zprostˇredkovává napojení na kód enginu. Uvedeme si nejduležitˇ ˚ ejší atributy a metody, které skripty dˇedí z tˇrídy MonoBehaviour. •
GameObject gameObject - atribut odkazující na pˇripojený herní objekt
•
Transform transform - atribut odkazující na komponentu transform
•
void Awake() - metoda volána pˇri inicializaci pˇripojeného objektu
•
void Start() - metoda volána po inicializaci objektu, ale pˇred prvním zavoláním metody Update()
•
void Update() - metoda volána pˇri vykreslení každého snímku
•
void OnGUI() - speciální metoda pro práci s prvky uživatelského rozhraní
6.6.1
Návrhový vzor
Hlavní funkcionalitu v aplikaci zajišt’uje skript GameEngine. Tento skript je založen na návrhovém vzoru singleton [8, s. 17-18]. Použitím tohoto ná18
ˇ 6. P RODUK CNÍ FÁZE
vrhového vzoru docílíme, že skript GameEngine bude mít v aplikaci právˇe jednu instanci. V Unity je možné implementovat daný návrhový vzor následovnˇe: Algoritmus 6.1 Ukázka implementace návrhového vzoru singleton v Unity p u b l i c c l a s s GameEngine : MonoBehaviour { p r i v a t e s t a t i c GameEngine gameEngine ; void Awake ( ) { i f ( gameEngine == n u l l ) { DontDestroyOnLoad ( gameObject ) ; gameEngine = t h i s ; } e l s e i f ( gameEngine ! = t h i s ) { Destroy ( gameObject ) ; } } p u b l i c s t a t i c GameEngine g e t ( ) { r e t u r n gameEngine ; } }
Uvedený kód zajišt’uje, že objekt, který bude mít jako svoji komponentu pˇripojený skript GameEngine, nebude odstranˇen pˇri pˇrechodu mezi herními scénami (z hlavního menu do hry a naopak), a v pˇrípadˇe pˇripojení skriptu k více herním objektum ˚ budou všechny objekty kromˇe prvního odstranˇeny bˇehem jejich inicializace. Skript dále zprostˇredkovává sdílení dat mezi scénami (jméno hráˇce, nejvyšší dosažené skóre). Pro tento úˇcel slouží tˇrída GameData, jejíž instance je dostupná v skriptu GameEngine. GameData je jednoduchá tˇrída obsahující kolekci s uloženými skóre, jméno hráˇce a metodu pro pˇridání nového nejvyššího skóre. Tˇrída je pˇripravená pro serializaci (uložení instance tˇrídy) z duvodu ˚ zachování dosažených skóre pˇri ukonˇcení aplikace. Skript GameEngine je pˇripojen ke stejnojmennému objektu. Herní objekt GameEngine obsahuje další tˇri skripty pro obsluhu kuželek, bowlingové koule a herní kamery. K tˇemto skriptum ˚ je možné pˇristupovat skrz 19
ˇ 6. P RODUK CNÍ FÁZE
GameEngine. V následujících tˇrech sekcích si zmínˇené skripty popíšeme. 6.6.2
Obsluha kuželek
Pro práci s objekty kuželky slouží skript PinHandler. Skript si udržuje informace o objektech kuželky za pomocí dvou kolekcí. První kolekce (typu Dictionary) obsahuje reference na objekty kuželky, které jsou souˇcástí herní scény. Druhá kolekce (typu List ) obsahuje identifikaˇcní cˇ ísla sražených kuželek v daném kole hry. Pro vložení kuželek do scény slouží metoda spawn(). Tato metoda vytvoˇrí instance prefabrikátu˚ kuželky (viz sekce 6.4), rozmístí je nad bowlingovou dráhou a upraví údaje v kolekcích. Kuželky jsou z poˇcátku umístˇené nad dráhou. Na povrch dráhy jsou posléze posazeny animaˇcním klipem pˇripojeným k prefabrikátu kuželky. Skript PinHandler dále zahrnuje základní metody (pˇridání/odebrání prvku, získání obsahu kolekce atd.) pro práci se zmínˇenými kolekcemi. Ke skriptu mužeme ˚ pˇristupovat zavoláním následujícího kódu: GameEngine . g e t ( ) . getPinHandler ( ) ;
6.6.2.1 Detekce sražení kuželky Prefabrikát kuželky má pˇripojený skript PinDetection, který sleduje, zda byla kuželka poražena. Toto je realizováno poˇcítáním skalárního souˇcinu [17] vektoru˚ osy Y daného objektu kuželky a globální osy Y pˇri vykreslení každého snímku aplikace. Pokud je skalární souˇcin menší než hodnota 0,85, tak je kuželka oznaˇcena jako sražená a dojde k notifikaci skriptu PinHandler. Algoritmus 6.2 Ukázka hlavní cˇ ásti skriptu PinDetection void Update ( ) { i f ( f a l l e n ) return ; i f ( Mathf . Abs ( Vector3 . Dot ( t r a n s f o r m . up , Vector3 . up ) ) < 0.85) { f a l l e n = true ; GameEngine . g e t ( ) . getPinHandler ( ) . addKnockedPin ( pinId ) ; } }
20
ˇ 6. P RODUK CNÍ FÁZE
6.6.3
Obsluha bowlingové koule
Práci s objektem bowlingové koule obstarává skript BallHandler. Jedná se o jednoduchý skript, který si udržuje referenci na herní objekt bowlingové koule (pokud se nachází ve scénˇe). Skript umožnuje ˇ objekt koule vložit do scény (vloží se prefabrikát koule popsaný v sekci 6.4), pˇrípadnˇe jej ze scény odstranit (napˇr. na konci hodu). Dále skript monitoruje, jestli byla koule vhozena do dráhy (v sekci 6.6.6 toto využijeme pro rozpoznání zaˇcátku hodu). Instanci BallHandler získáme zavoláním následujícího kódu: GameEngine . g e t ( ) . g e t B a l l H a n d l e r ( ) ;
6.6.3.1 Ovládání koule U prefabrikátu bowlingové koule je pˇripojen skript BallControl. Tento skript zprostˇredkovává interakci uživatele s bowlingovou koulí pomocí dotykového ovládání. Detekce uživatelského vstupu v herním enginu Unity je pˇrístupná skrze rozhraní Input [18]. Rozhraní nabízí statickou metodu GetTouch [19], kterou ve skriptu používáme pro získání údaju˚ o dotyku. U každého dotyku je možné zjistit, v jaké se nachází fázi pomocí výˇctového typu TouchPhase [20]. Díky tomu mužeme ˚ rozlišit, jestli uživatel pouze poklepal na obrazovku, nebo pˇres ni provedl tah. Skript umožnuje ˇ dvˇe možnosti manipulace s objektem koule: horizontální posun koule pˇred zaˇcátkem hodu a samotné vhození koule na dráhu. Horizontální posun koule nastane v pˇrípadˇe, že uživatel dvakrát poklepe na objekt koule a následnˇe provede tah do strany. Jestli se uživatel na obrazovce dotknul koule, zjišt’ujeme pomocí techniky raycasting. Protože Unity nemá vestavˇenou detekci dvojitého poklepání na obrazovku, musí skript tuto funkcionalitu obstarávat sám. Ve skriptu si proto ukládáme cˇ asy zaˇcátku a konce dotyku˚ a z rozdílu˚ cˇ asu˚ zjišt’ujeme, jestli uživatel provedl dvojité poklepání. Po dokonˇcení posunu koule probˇehne vystˇredˇení kamery (animace kamery bude detailnˇeji rozebrána v sekci 6.6.4) vzhledem k objektu koule. Pokud se uživatel dotkne bowlingové koule a provede tah smˇerem ke kuželkám, dochází k hodu koule. Pˇri ukonˇcení tahu po obrazovce si ve skriptu zaznamenáváme poslední dotyk s dráhou. Z pozice objektu koule a posledního doteku ve skriptu zjistíme úhel, pod kterým má být koule hozena. Rozdíl cˇ asu˚ zaˇcátku a konce dotyku urˇcují sílu hodu (kratší cˇ as tahu 21
ˇ 6. P RODUK CNÍ FÁZE
znamená vˇetší sílu aplikovanou pˇri hodu). Pˇri vhození koule na dráhu zárovenˇ dochází k notifikaci skriptu BallHandler. 6.6.4
Obsluha kamery
Bˇehem prubˇ ˚ ehu hry budeme potˇrebovat pˇri ruzných ˚ pˇríležitostech animovat kameru (vystˇredˇení kamery po posunutí koule, sledování koule po jejím vhození do dráhy atd.). Pro zajištˇení této funkcionality bude sloužit skript CameraHandler. Ve skriptu si musíme udržovat referenci na animovanou kameru, protože scéna muže ˚ obsahovat více aktivních kamer. Pˇri pˇrechodu mezi scénami je potˇreba odkaz na kameru aktualizovat, ponˇevadž objekt kamery pˇri zmˇenˇe scény zaniká. Pro vˇetšinu animací kamery použijeme speciální metody enginu zvané coroutines [21]. Jedná se o metody, které na rozdíl od klasických funkcí nemusí provést celý svuj ˚ kód bˇehem jediného snímku aplikace, ale za pomoci pˇríkazu yield je možné provádˇení kódu metody pozastavit nezávisle na kódu zbytku aplikace. Pozastavení muže ˚ být na urˇcitý poˇcet sekund, pˇrípadnˇe pouze do doby provedení následujícího snímku. Coroutine metody mají návratový typ IEnumerator a je možno je volat pouze jako parametr funkce StartCoroutine(). Základem pro animaci kamery je pˇretížená coroutine metoda doCameraAnimation(). Tato metoda umožnuje ˇ provést animaci zmˇeny pozice a rotace objektu kamery trvající specifikovanou dobu. Po zahájení hodu a vzdálení objektu koule od kamery na pˇet metru˚ (v mˇerˇ ítku herního enginu) je pomocí metody cameraChaseCatchUp() kamera animací posunuta za objekt koule. Skript CameraHandler dále obsahuje metodu cameraChaseCatchUp() pro srovnání kamery a objektu koule po zahájení hodu. Tato metoda je volána po zahájení hodu a vzdálení objektu koule od kamery na pˇet metru˚ (v mˇerˇ ítku herního enginu). Ke skriptu CameraHandler mužeme ˚ pˇristupovat za pomoci následujícího kódu: GameEngine . g e t ( ) . getCameraHandler ( ) ;
6.6.5
Vytvoˇrení hlavního menu
V sekci 6.5 jsme si již uvedli, že pro hlavní menu vyˇcleníme samostatnou herní scénu. Základ scény tvoˇrí prefabrikát místnosti a objekt kamery. Scéna 22
ˇ 6. P RODUK CNÍ FÁZE
musí obsahovat objekt s pˇripojeným skriptem GameEngine (viz sekce 6.6.1), protože po spuštˇení aplikace je scéna s hlavním menu naˇctena jako první. Posledním prvkem scény je herní objekt Menu s pˇripojeným skriptem GUIMenu. Skript GUIMenu slouží k vytvoˇrení uživatelského rozhraní hlavního menu. V Unity je vestavˇená podpora pro tvorbu uživatelského rozhraní v podobˇe tˇríd GUI [22] (rozmístˇení prvku˚ rozhraní specifikuje programátor) a GUILayout [23] (rozmístˇení prvku˚ probíhá automaticky). Metody zmínˇených tˇríd je možno volat ve skriptu GUIMenu uvnitˇr speciální metody OnGUI(). Menu obsahuje cˇ tyˇri strany: úvodní strana, tabulka s nejvyššími skóre, nápovˇedu a stranu pro zadání jména hráˇce pˇred spuštˇením hry. Pro reprezentaci jednotlivých stran slouží výˇctový typ MenuPage se záznamem pro každou stranu. Podle hodnoty atributu typu MenuPage dochází v tˇele metody OnGUI() k vykreslení prvku˚ jedné ze stran menu. Pro urˇcení rozmístˇení a velikosti jednotlivých prvku˚ uživatelského rozhraní jsou ve skriptu k dispozici následující cˇ tyˇri atributy: •
menuItemWidth - základní šíˇrka prvku
•
menuItemHeight - základní výška prvku
•
menuItemXCoord - poˇcáteˇcní umístˇení prvku˚ na osy X (od levého kraje obrazovky)
•
menuItemYPivot - odsazení jednotlivých prvku˚ na ose Y
Obrázek 6.4: Ukázka hlavního menu hry 23
ˇ 6. P RODUK CNÍ FÁZE
6.6.6
Pˇridání herní logiky
Logika hry je realizována skriptem Game a tˇrídou GameRound (model jednoho kola hry). Skript Game je ve hlavní scénˇe hry pˇripojen ke stejnojmennému objektu. 6.6.6.1 Reprezentace kola hry V aplikaci je potˇreba uchovávat údaje pro každé z deseti herních kol. Tˇrída GameRound slouží jako jednoduchý model, který obsahuje informace o jednom kole hry. Pro každé kolo si musíme ukládat údaje o poˇctu sražených kuželek v jednotlivých hodech. Pro tento úˇcel slouží tˇrí prvkové pole typu int (poslední kolo hry muže ˚ mít až tˇri hody, zbylá kola jeden až dva hody). Z pocˇ tu sražených kuželek vyplývá skóre (reprezentované atributem typu int ) dosažené v daném kole. Tˇrída dále obsahuje atributy typu bool udržující informace o dosažení strike nebo spare. Rozlišení probíhajícího hodu v soucˇ asném kole zajišt’uje atribut typu Throw (výˇctový typ obsahující záznamy pro tˇri možné hody). 6.6.6.2 Prubˇ ˚ eh hry Prubˇ ˚ eh hry rˇ ídí skript Game. Ve skriptu je kolekce (typu List ), která slouží pro uchování objektu˚ kol hry (instance tˇrídy GameRound ). Bˇehem inicializace skriptu jsou do této kolekce vložena data a první objekt kola v kolekci je oznaˇcen jako aktivní. Detekce zaˇcátku hodu koulí probíhá v metodˇe Update(). Tato metoda je provádˇena opakovanˇe pˇri vykreslení každého snímku aplikace. Pro zjištˇení zaˇcátku hodu voláme metodu getIsLaunched() skriptu BallHandler. Hod je vyhodnocen jako ukonˇcený, pokud objekt bowlingové koule pˇrekonal celou dráhu a nesražené kuželky jsou v klidovém stavu, pˇrípadnˇe po vypršení cˇ asového limitu délky hodu. Zavedení cˇ asového limitu je bezpeˇcnostní opatˇrení pro pˇrípad neoˇcekávané chyby, která by zpusobila, ˚ že aktivní hod by nebyl nikdy ukonˇcen. Po vyhodnocení hodu jako ukonˇceného dochází k zavolání coroutine metody throwEnded(). Tato metoda obstarává vyhodnocení výsledku hodu a pˇrípravu na další hod, pˇrípadnˇe ukonˇcení souˇcasné hry po odehrání všech deseti kol. Provádˇení kódu metody throwEnded() je možno pozastavit, ponˇevadž se jedná o coroutine metodu. Tohoto faktu je využito pˇri pˇrehrávání animace sbˇeru kuželek (provádˇení kódu je bˇehem prubˇ ˚ ehu animace pozastaveno). Pˇripojení animaˇcního klipu k objektu zaˇrízení pro sbˇer kuželek 24
ˇ 6. P RODUK CNÍ FÁZE
bylo popsáno v sekci 6.4. Vyhodnocení výsledku hodu v metodˇe throwEnded() probíhá pro každý hod zvlášt’, protože v jednotlivých hodech mohou nastat odlišné situace pro výpoˇcet získaných bodu˚ a získaných bonusu˚ (strike a spare). 6.6.7
Prvky uživatelského rozhraní ve hˇre
V aplikaci chceme uživatele informovat o základních údajích o probíhající hˇre. Tuto funkcionalitu zajišt’uje skript GUIGame pˇripojený jako komponenta k objektu Game. Skript na obrazovce zaˇrízení vytváˇrí dvou rˇ ádkové rozhraní. Na prvním rˇ ádku je zobrazeno zadané jméno hráˇce, dosažené skóre ze souˇcasné hry a tlaˇcítko urˇcené pro pozastavení hry. Druhý rˇ ádek tvoˇrí posuvná lišta zobrazující výsledky pro všechna kola probíhající hry. Stisknutím tlaˇcítka pro pozastavení hry dojde ke schování obou rˇ ádku˚ rozhraní a zobrazení jednoduchého menu obsahujícího tlaˇcítka pro návrat do hry a ukonˇcení hry. Skript zobrazí výsledné skóre a tlaˇcítko pro návrat do menu v pˇrípadˇe, že uživatel odehraje všech deset kol bowlingu.
Obrázek 6.5: Ukázka herního uživatelského rozhraní
25
7 Postprodukˇcní fáze Postprodukce je finální fází procesu vývoje hry. Herní aplikace je v této fázi již hotová a je potˇreba zajistit její distribuci ke koncovým uživatelum. ˚ Pˇred tímto krokem však musíme zajistit, aby byla aplikace bez chyb, a proto nejprve provedeme testování vytvoˇrené hry.
7.1
Testování
Testování doprovodné aplikace je zamˇerˇ eno na dodržování herních principu˚ aplikací a kompatibilitu softwaru se zaˇrízeními využívajícími OS Android. Testování aplikace probíhalo ve dvou fázích. V první jsem testování hry provádˇel sám jako autor aplikace. Herní principy (správná implementace pravidel, prubˇ ˚ eh hry atd.) je možné otestovat pˇrímo ve vývojovém prostˇredí herního enginu (místo dotykového ovládání lze používat v aplikaci myš). Pro testování kompatibility se zaˇrízeními jsem mˇel k dispozici mobilní telefony Samsung Galaxy SIII a Sony Ericsson Xperia X10i. Hry vytvoˇrené v Unity je pro Android možné exportovat pouze pro zaˇrízení s procesory založenými na architektuˇre ARMv7. Oba dostupné telefony jsou vybaveny požadovanými procesory. Na zaˇrízení od Samsungu vytvoˇrená hra funguje bezproblémovˇe. Druhý zmínˇený telefon je ménˇe výkonný, a pˇrestože aplikace na telefonu funguje, prubˇ ˚ eh hry není tak plynulý jako na pˇredchozím zaˇrízení. V druhé fázi testování byla oslovena úzká skupina lidí s žádostí o úˇcast v uzavˇreném beta testu aplikace. Úˇcastníci testu mˇeli k dipozici instalaˇcní soubor aplikace a po vymezeném cˇ ase urˇceném k vyzkoušení hry mi sdˇelili dojmy a postˇrehy z hraní a jestli aplikace funguje na jim dostupným zaˇrízeních. Všichni úˇcastníci testu mi potvrdili funkˇcnost hry a poskytli mi tak pozitivní zpˇetnou vazbu.
7.2
Distribuce aplikace
Aplikace urˇcené pro platformu Android jsou bˇežnˇe distribuované pˇres specializované internetové portály. Šíˇrení instalaˇcních souboru˚ aplikací jinými zpusoby ˚ není vhodné, protože operaˇcní systém Android instalaci tˇechto souboru˚ ve výchozím nastavení nedovoluje a na každém zaˇrízení je nutné povolit instalaci manuálnˇe. Hru vytvoˇrenou pro úˇcely této práce zveˇrej26
ˇ 7. P OSTPRODUK CNÍ FÁZE
níme pˇres online distribuˇcní službu Google Play1 . 7.2.1
Služba Google Play
Google Play je nejznámˇejší distribuˇcní kanál pro aplikace urˇcené na platformu Android. Do roku 2012 byla služba známá pod jménem Android Market. Mimo aplikací pro Android je pomocí této služby možné nakupovat i elektronické knihy a hudbu (v zahraniˇcí je nabídka rozšíˇrena o nákup filmu˚ a televizních seriálu). ˚ Pro zveˇrejnování ˇ vlastních aplikací na Google Play je nutné si vytvorˇ it vývojáˇrský úˇcet. Založení úˇctu je zpoplatnˇeno jednorázovou cˇ ástkou 25 amerických dolaru. ˚ Nahrání aplikace do služby probíhá pomocí Vývojáˇrské konzole pro Google Play.
Obrázek 7.1: Ukázka Vývojáˇrské konzole pro Google Play Aplikaci je možné publikovat ve tˇrech krocích. V první cˇ ásti nahrajeme instalaˇcní soubor hry na server služby. Aplikace musí být pˇred nahráním podepsána klíˇcem (keystroke soubor). Klíˇc je možné vygenerovat pˇrímo v herním enginu Unity. V druhé cˇ ásti je potˇreba vyplnit údaje o aplikaci, které budou zobrazeny na stránce se hrou. Základní údaje jsou název, popis, kategorie aplikace a kontakt na autora. Dále je povinné vložení alesponˇ dvou snímku˚ obrazovky se hrou a ikona aplikace. 1.
https://play.google.com/store
27
ˇ 7. P OSTPRODUK CNÍ FÁZE
Poslední cˇ ást obsahuje distribuˇcní údaje. Zde je možné omezit dostupnost aplikace v ruzných ˚ zemích a nastavit cenu aplikace. Hru vytvoˇrenou pro tuto práci necháme ke stažení zdarma a bez omezení používání kdekoli. Pˇred zveˇrejnˇením aplikace je nutné odsouhlasit pokyny pro obsah systému Android. Vytváˇrenou hru je možné nalézt ve službˇe Google Play na následujícím odkazu: https://play.google.com/store/apps/details?id=cz. eshopfactory.bowlsolo.
Obrázek 7.2: Detail stránky s aplikací na portálu Google Play
28
8 Závˇer Tato práce mˇela za cíl popsat proces vývoje her na mobilní platformˇe Android a vytvoˇrit doprovodnou herní aplikaci. V textu jsme uvedli základní údaje o platformˇe a jejích možnostech pro vývojáˇre. Proces vývoje her jsme si rozdˇelili do tˇrí fází. Rozboru každé fáze byla vˇenována samostatná kapitola, ve které jsme si popsali roli dané fáze v procesu. Praktickým výstupem práce je mobilní hra simulující sport bowling. Vizuální stránka aplikace zachycuje atmosféru skuteˇcných bowlingových center a prubˇ ˚ eh hry se rˇ ídí pravidly své reálné pˇredlohy. Výsledná aplikace splnuje ˇ požadavky, které jsme si uvedli ve specifikaci aplikace v kapitolách 3 a 5. Hra je dostupná na portálu služby Google Play, kde je možné ji zdarma nainstalovat na jakékoliv podporované zaˇrízení s platformou Android. Vývoj aplikace mimo rozsah této bakaláˇrské práce by mohl zahrnovat pˇridání funkcionality pro podporu více hráˇcu, ˚ možnost volby prostˇredí jiných bowlingových center nebo zveˇrejnování ˇ dosažených výsledku˚ na úˇctech sociálních sítí uživatelu. ˚
29
Knižní zdroje [1] GREEN, R., ZECHNER, M. Beginning Android 4 Games Development. Apress, 2011. 696 s. ISBN 978-1-4302-3987-1. [2] NOVAK, Jeannie. Game Development Essentials: An Introduction. Delmar, Cengage Learning, 2012. ISBN 978-1-1113-0765-3. [3] RABIN, Steve. Introduction to Game Development. Course Technology, 2009. ISBN 9781584506799. [4] DIMARZIO, J. F.. Practical Android 4 Games Development. Apress, 2011. 320 s. ISBN 9781430240297. [5] DIMARZIO, J. F.. Android: a programmer’s guide. United States of America: McGraw-Hill Osborne Media, 2008. 400 s. ISBN 9780071599887. [6] GOLDSTONE, Will. Unity 3x Game Development Essentials. Packt Publishing, 2011. 488 s. ISBN 978-1-84969-144-4. [7] BLACKMAN, Sue. Beginning 3D Game Development with Unity 4: All-in-one, multi-platform game development. Apress, 2013. 808 s. ISBN 978-1430248996. [8] BLOCH, Joshua. Effective Java: Second Edition. Upper Saddle River: Addison-Wesley, 2008. 346 s. ISBN 978-0321356680. [9] BABB, P., ZOCH, P., BARRET, R., GOLDSMITH, A., MATTHEW, A. Cinema 4D Release 6. Computer Press, 2004. 268 s. ISBN 8025100014. [10] FINNEGAN, Thomas. Unity Android Game Development by Example Beginner’s Guide, 2013. 320 s. ISBN 978-1849692014. [11] NASH, Trey. C# 2010 Rychlý pruvodce ˚ novinkami a nejlepšími postupy, 2010. 624 s. ISBN 978-80-251-3034-6.
30
Internetové zdroje [12] StatCounter. Top 8 Mobile & Tablet Operating Systems on Mar 2014 [online]. [cit. 2014-04-10]. Dostupné na World Wide Web:
. [13] NOVOTNÝ, Václav. Základy bowlingu [online]. [cit. 2014-04-09]. Dostupné na World Wide Web: . [14] Arlington: International Bowling Museum and Hall of Fame. History of bowling [online]. [cit. 2014-04-09]. Dostupné na World Wide Web: . [15] Svˇetová asociace desetikuželkového sportu. Pravidla [online]. [cit. 2014-04-09]. Dostupné na World Wide Web: . [16] Purdue University. Game Development Process [online]. [cit. 2014-0410]. Dostupné na World Wide Web: . [17] Unity Technologies. Unity Script Reference: Vector3.Dot [online]. [cit. 2014-04-28]. Dostupné na World Wide Web: . [18] Unity Technologies. Unity Script Reference: Input [online]. [cit. 201404-28]. Dostupné na World Wide Web: . [19] Unity Technologies. Unity Script Reference: Input.GetTouch [online]. [cit. 2014-04-28]. Dostupné na World Wide Web: . [20] Unity Technologies. Unity Script Reference - TouchPhase [online]. [cit. 2014-04-28]. Dostupné na World Wide Web: 31
[21] Unity Technologies. Unity - Coroutines [online]. [cit. 2014-04-28]. Dostupné na World Wide Web: . [22] Unity Technologies. Unity Script Reference: GUI [online]. [cit. 2014-0428]. Dostupné na World Wide Web: . [23] Unity Technologies. Unity Script Reference: GUILayout [online]. [cit. 2014-04-28]. Dostupné na World Wide Web: .
32
Pˇrílohy Elektronická pˇríloha v IS Souˇcástí práce je projekt hry urˇcený pro vývojové prostˇredí Unity a instalaˇcní soubor aplikace. Pˇríloha je dostupná v archivu práce v Informaˇcním systému MU. Adresáˇr projektu obsahuje veškeré vytvoˇrené modely, textury a zdrojový kód.
33