• Nebyly nalezeny žádné výsledky

2.2.1 Čo je Unity Engine 3D

Unity 3D je multiplatformový herný engine vyvinutý spoločnosťou Unity Technologies v roku 2005. Prvá verzia bola predstavená na konferencii Apple a podporovala len systém OS X. Neskôr bol tento engine rozvinutý o viac ako pätnásť ďalších platforiem. Unity poskytuje možosť vývoja pre 2D, 3D a VR hry ľubovoľného žánru a zamerania, pre rozličné platformy. Takisto Unity Engine poskytuje možnost vývoja desktopových a mobilných aplikácií a webových rozhraní.

Avšak tvorba hier je najdominantnejšia.

Okrem graĄckého zamerania pre tvorbu, podporuje aj tvorbu skriptov a to predovšetkým v jazyku C#. Unity Engine podporuje aj dalšie dva programovacie jazyky, Java a Boo, ktoré sú menej rozšírené oproti vyššie spomínanému C#. Výhodou graĄckého prostredia Unity Enginu je hlavne „drag and dropŞ funkcia, ktorá uživateľovi umožnuje rýchlu a jednoduchú tvorbu hier a aplikácii.

Unity Engine predstavuje veľmi dôležitú časť v dnešnom hernom priemysle. Čím daľej sa vyvíja viac a viac hier na tomto engine a to vďaka jeho jednoduchosti a bezplatnosti.

2.2.2 Podporované platformy

Platformy, ktoré podporuje Unity Engine:

1. Mobilné: iOS ,Android, Tizen a Windows mobile 2. Desktop: Universal Windows Platform, Linux a MacOS 3. Web: WebGL

4. Konzoly: PlayStation 4, Playstation Vita, Xbox One, Wii U, Nintento 3DS, Nintendo Switch

5. Virtuálna realita: Oculus Rift, Google Cardboard, Steam VR, Playstation VR, Gear VR, Windows Mixes Reality, Daydream

6. Ostatné: Android TV, Samsung Smart TV, tvOS, FireOS, Facebook Gameroom, Apple ARKit, Google ARCore, Vuforia

Unity Engine má vlastný Unity Web Player, ktorý bol vyvinutý ako plugin do webových pre-hliadačov na podporu prehrávania webových projektov, ako napríklad hier a aplikácií, ktoré boli vyvinuté práve Unity Enginom. Najskôr bol tento plugin podporovaný len systémami Windows a OS X a až neskôr sa dostal do ostatných systémov.

Ohľadom práce v 2D, Unity Engine umožnuje import spritov a pokročilejšieho 2D rendero-vania. Čo sa týka 3D herného prostredia, Unity Engine umožnuje špeciĄkáciu compresie textury,

mipmapovania a nastavenie rozlíšenia pre každú z vyššie uvedených platforiem. Ďalej Unity En-gine poskytuje podporu pre: bump mapping, reĆection mapping, parallax mapping, screen space ambient occlusion (SSAO), dynamické tienovanie a full-screen post-processing effects.

2.2.3 Podporované graĄcké API

Unity Engine zahŕňa nasledujúce graĄcké API:

1. Direct3D- Windows, Xbox One 2. OpenGL - Windows, Linux, macOS 3. OpenGL ES - Android, iOS

4. WebGL - web

Mimo vyššie uvedené graĄcké API Unity Engine podporuje aj low-level API ako: Mental pre iOS a macOS, Vulkan pre Android, Linux a Windows a v poslednom rade Direct3D 12 pre Windows a Xbox One.

2.2.4 Licencie Unity Engine 3D

Unity engine prichádza v štyroch licenčných podobách, ktoré sú uvedené v tabuľke 12:

License Name All engine Features Multiplayer Performance Reporting Premium Support Access to Source Code

Personal YES 20 CCUs NO NO NO

Plus YES 50 CCUs YES NO NO

Pro YES 200 CCUs YES YES NO

Enterprise YES Custom Multiplayer YES YES YES

Tabuľka 1: Unity 3D licencie 2.2.5 Prostredie Unity 3D

Prostredie Unity sa skladá z Unity project manageru a editoru, kde editor je tou hlavnou a najpodstatnejšou časťou Unity enginu.

Unity project manager

Domovská obrazovka, ktorá sa objaví po spustení Unity a umožnuje správu našich projektov a možnosť vzdelávania sa v oblasti Unity pomocou rôznorodých tutoriálov.

GraĄcké prostredie Unity Editoru

Srdce Unity enginu, v ktorom sa odohráva samotný proces vývoju aplikácii. Unity Editor disponuje špeciálnym rozložením spravovacích okien, vďaka ktorým je práca v Unity prehľadná a jednoduchá. GraĄcké rozhranie Unity Editoru by sa dalo rozdeliť do 5-tich skupín:

2https://store.unity.com/compare-plans

1. Hierarchy Window - hierarchická prezentácia každého objektu v scéne.

2. Toolbar - predstavuje prístup k najnevyhnutelnejším nástrojom, ktoré sú potrebné pri práci v Unity Editore. Naľavo obsahuje základné nástroje na mainupuláciu so scénou a objektami v nej. V strede toolbaru sa nachádzajú play, pause a step control tlačidlá. V poslednom rade na pravej strane toolbaru sa nachádzajú tlačidlá na prístup k Unity Cloud Services a Unity Account.

3. Scene View-umožnuje nám sa vizuálne navigovať v scéne a upravovať ju. Takisto umož-nuje zobrazovanie v 2D alebo 3D perspektíve, zavisí na našom projekte.

4. Inspector Window - dovoľuje nám vidieť a upravovať všetky vlastnosti nami zvoleného objektu. Nie vždy ma Inspector Window rovnaký vzhľad kvôli rozličnosti objektov v scéne a ich rozličných vlastností.

5. Project Window - zobrazuje našu knižnicu pomôcok, ktoré je možné v našom projekte využiť alebo sa už využívajú. Keď sú do projektu naimportované rôzne assety sú zobrazené práve tu.

2.2.6 Prostredie a základné pojmy Unity 3D

Tie najzákladnejšie pojmy v Unity 3D sú gameObject, hlavný stavebný prvok celého gameEnginu a asset store, v ktorom si môžme sťahovať už predpripravené gameObjekty od iných uživateľov a následne ich implementovať do nášho projektu a tým si ušetriť kopec práce.

Asset store Unity 3D disponuje vlastnou webstránkou 3 určenou na získavanie rôznych assetov (modely, textúry, fonty...). Toto rozhranie dovoľuje uživateľom pridávať ich vlastnoručne vytvorené assety alebo ich získavať. Uživateľ ich môže získať zadarmo alebo za určitú peňažnú čiastku. Toto rozhranie uľahčuje prácu v Unity a to vďaka tomu, že uživateľ nemusí vytvárať vlastné assety, jednoducho ich stačí na asset store nájsť a pripojiť do projektu.

GameObject

Predstavuje najdôležitejšiu čast v Unity Editore. Každý objekt, ktorý sa nachádza v scéne predstavuje GameObject, ktorý vytvára celkový vzhľad nášho projektu. Avšak na to musíme každému objektu prideliť jeho vlastnosti aby sme tým deĄnovali jeho správanie a úlohu, ktorú v projekte predstavuje (prostredie, hráč, nepriateľ, svetlo, atď). Vlastnosti, ktoré budeme Ga-meObjectu pridávať sa nazývajú Komponenty. Ukážku GaGa-meObjectu môžme vidieť na obrázku 1.

3https://assetstore.unity.com/

Obr. 1: Príklad GameObjectu Základné komponenty GameObjectu

Každý GameObject má pridelenú komponentu Transform, ktorá určuje jeho pozíciu a orien-táciu v scéne, túto komponentu nie je možné odstrániť. Ostatné komponenty je možné prideliť ručne. Medzi tie najzákladnejšie komponenty patria:

1. Rigidbody 3D - hlavná komponenta, ktorá umožnuje deĄnovať fyzicke správanie pre GameObject. Akonáhle pridelíme Rigidbody objektu začne automaticky reágovať na gra-vitáciu.

2. Collider - deĄnuje tvar objektu za cieľom fyzickej interakcie. Collider nie je viditeľný a nemusí byť rovnakej veľkosti ako GameObject na ktorý je pridelený, veľkosť a tvar deĄnuje uživateľ. Základné tvary collideru sú: Box Collider, Sphere Collider a Capsule Collider. V 2D je možné využiť Box Collider a Circle Collider. Pre vlastnú deĄníciu tvaru Collideru slúžia Mesh Collider a v 2D Polygon Collider 2D.

3. Particle System - sú to malé, jednoduché obrazky ktoré sú zobrazované mnoho krát partical systémom. Ako príklad môže slúžit dym, ktorý sa skladá z mnoho menších častic, ktoré dohromady vytvárajú efekt dymu.

4. Script - každému GameObjectu v projekte môžeme prideliť Script v ktorom mu progra-mujeme chovanie alebo chovanie iných objektov.

5. Audio - pridelenie zvukového efektu objektu.

3 Simulátor futbalu robotov

V tejto kapitole sa budeme zaoberať podrobnejšim opisom zmien a vylepšení, ktoré boli v už stávajúcom simulátore vykonané. Avšak najskôr treba lepšie priblížiť informácie o simulátore ako takom.

Ako vyplýva už z názvu jedná sa o typ simulátoru, ktorý simuluje futbalový zapas medzi dvoma tímami robotov. Na hracom poli sa nachádzajú dva tímy robotov, kde sa v každom tíme nachádza päť robotov. Roboti majú presne deĄnované svoje správanie v podobe deĄnícií strategií a taktík, ktoré určujú ako sa majú chovať v určitých situáciach, ktoré môžu na hracom poli nastať. Tieto situácie vyplývajú z pozície všetkých objektov na hracom poli (oponent, lopta, spoluhráč)[4].

Simulátor slúži predovšetkým na simuláciu futbalového zápasu medzi robotmi, kde uživateľ má možnosť nadeĄnovať si vlastné správanie robotov v podobe.strgsúboru, obsahujúce stratégie robotov. Herné pole simulátoru je logicky rozdelené na časti (viď obrázok 2), presnejšie mriežku, kde práve spomínaný súbor obsahujúci stratégie pracuje s týmto gridom a kde pomocou neho deĄnuje ako sa majú roboti správať v opísanej situácii. Súbor obsahuje vo vnútri sadu pravidiel, kde každé pravidlo obsahuje: informáciu o pozícií súperových hráčov, vlastných hráčov a lopty (čo vyjadruje situáciu, ktorá môže behom hry nastať) a nakoniec obsahuje kam sa majú moji roboti v tejto situácii presunúť. Na základe tejto sady pravidiel, ktorá sa pred spustením hry načíta v podobe.strg súboru, sa počas hry roboti správajú. Podrobnejší opis tejto funkcionality sa nachádza v kapitole 3.1.

Ďaľej uživateľ má možnosť nahrať dynamicky do simulátoru pomocou API vlastný.dll súbor, pred spustením simulátoru, ktorý rieši ako bude simulátor vyberať tie správne pravidlá, z vyššie spomínaného súboru stratégii, a taktiku robotov. Pod taktikou robotov chápeme napríklad výber tej najlepšej cesty k lopte, oblasť záujmu robotov o loptu atď. Dll súbor musí spĺnať určitú štruktúru aby pracoval správne so simulátorom. Toto umožnenie uživateľovi nahrať vlastný.dll súbor do simulátoru je hlavnou náplňou tejto práce a je daľej podrobnejšie opísané. Takisto má použivateľ možnosť získať po zápase výsledky z priebehu hry, v ktorých má možnosť vidieť svoje chyby a podľa nich svoje deĄnície stratégii ďalej vylepšovať pomocou adaptácie stratégii, ktorá je opísaná v kapitole 3.5.

3.1 Stratégie a pravidlá

Architektúra simulátoru používa dva typy reprezentácie hernej plochy (viď obrázok 2):

• veľmi presný súradnicový systém, používaný pre presnejšiu koordináciu robotov na hernej ploche

• gridový systém, ktorý sa používa pre deĄníciu strategií - herná plocha je rozdelená na grid (mriežku)

Obr. 2: Reprezentácia hernej plochy simulátoru

Využitím gridového súradnicového systému zredukujeme presnosť mapovania fyzických sú-radníc robotov na logické súradnice. Tým pádom môžme jednoducho podľa týchto súradnic opísať situáciu na hernom poli a na túto situáciu reagovať. Pre toto nám slúžia už spomínané stratégie, ktoré si uživateľ deĄnuje a pred spustením simulácie ich nahrá v menu, toto menu a nahrávanie stratégií je opísané v kapitole 3.4.3. Táto stratégia je v podstate textový súbor, ktorý má určitú štruktúru, viz tabulka 2. Tento súbor obsahuje množinu pravidiel, kde každé pravidlo deĄnuje čo majú roboti v danej situáci robiť a ako sa zachovať. Jednotivé pravidlo ob-sahuje: pozíciu súperových robotov, pozíciu mojich robotov, pozíciu lopty a kam sa majú moji roboti pohnúť ak táto situácia nastane. Herná plocha simulátoru je presnejšie rozdelená na grid (mriežku) o veľkosti 6x4.

1

Mine 4,2 4,3 2,2 2,3 Oppnt 4,2 4,3 5,1 5,4

Ball 4,2

Move 5,2 5,3 2,2 3,3

2

Mine 5,2 5,3 2,2 3,3 Oppnt 5,2 5,3 5,1 5,4

Ball 5,2

Move 6,2 5,3 2,2 3,3

3

Mine 6,2 5,3 2,2 3,3 Oppnt 5,2 5,3 5,1 5,4

Ball 6,2

Move 6,2 5,3 2,2 3,3

Tabuľka 2: Ukážka štruktúry stratégie

3.1.1 Výber pravidla

Počas hry sa tieto deĄnované pravidlá musia overovať voči situácii na hernej ploche a podľa toho vybrať pravidlo, ktoré sa v danú chvíľu použije. Tento výber pravidla má na starosti API, dll nahraté do simulátoru, ktoré by malo tento výber pravdila v danej situácií uskutočniť.

Ako bolo vyššie spominané každých 20 ms sa volá metóda z dll súboru kde ako parameter sa posiela trieda StrategyStorage obsahujúca informácie o situácii na hernom poli ako je pozícia všetkých hráčov a pozícia lopty. Na základe týchto údajov by malo dané API vybrať to najlepšie pravidlo a tým reagovať na danú situáciu.

V už existujúcom API, ktoré bolo oddelené od simulátoru a teraz je nahravané dynamicky (podrobnejší opis v kapitole 3.2.2), tento výber najlepšieho pravidla bol realizovaný pomocou Z-order algoritmu a grafu. Z-order algoritmus bol použitý pretože roboti na hracom poli nemajú presný identiĄkátor alebo presne danú rolu. Z-order algoritmus práve mapuje viac-dimenzionálny priestor do jedno-dinemzionálneho takže v našom prípade bol použitý pre konvertovanie dvoj-dimenzionálnej matice, reprezentujúcej herné pole, na jedno-dimenzionálne pole s individuál-nymi pozíciami robotov. Graf bol použitý na reprezentáciu pravidiel v danej stratégii. Každý uzol predstavuje pravidlo danej stratégie a hrana obsahuje evaluáciu čo korenšponduje vzdiale-nosti medzi dvoma susednými uzlami (pravidlami), ktorá bola vypočítana pomocou Euklidovej vzdialenosti, viz obrázok 3.

Obr. 3: Z-order mapovanie a graf pravidiel

Takisto môžeme v stratégií deĄnovať podrobnejšie pravidlá (substratégie). Substratégia pred-stavuje herné situácie ako ofenzíva pravého krídla alebo defenzíva ľavého krídla.

V priebehu hry sa teda vyberá to najlepšie pravidlo odpovedajúce hernej situácii na hracom poli a následne nám API vráti súradnice, kam sa majú roboti pohnúť a simulátor tento presun zabezpečí. Kedže môže nastať veľmi veľa situácii na hracom poli a nie vždy uživateľ dokáže po-písať všetky, tak sa vyhodnocuje podobnosť pravidla so situáciou a vyberie sa pravidlo podobné danej situácií.