Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

3. diel - Unity (C #) Android: Generovanie Stalag

Vítam vás u ďalšieho tutoriálu na 2D hru pre Android v Unity. V minulej lekcii, Unity (C #) Android: Pohyb, grafika, particles , sme naprogramovali pohyb hráča a pridali základné grafiku hry.

V dnešnej lekcii nás čaká vytvorenie mapy. K tomu si môžeme zvoliť dva možné spôsoby. Buďto môžeme tvoriť mapy sami, tým pádom by sme tvorili skôr levely, a alebo môžeme vygenerovať mapu automaticky a mať nekonečnú mapu ako má napríklad hra Flappy bird. My si zvolíme možnosť druhú.

Sprity

Dnes začneme tým, že si na mape urobíme dlhú cestu, zatiaľ ručne. Automaticky generovať budeme až prekážky.

V archíve pod lekcií nájdete niekoľko obrázkov, stiahnite si ich prosím. Obrázky si importuje do Unity. Ak by sme ich presunuli na našej scénu, uvidíme, že máme všetky sprity pohromade, čo samozrejme nechceme. Avšak v hrách sa často súvisiace sprity vkladajú do jedného obrázku, aby sme nemali milión súborov. Naším cieľom je teraz tieto sprity osamostatniť.

Rozdelenie spritov

Pokiaľ si v Assets klikneme na náš obrázok, vpravo môžeme vidieť nastavenia. Sprite mode nastavíme na multiple, čím Unity oznámime, že obrázok obsahuje spritov hneď niekoľko. Následne klikneme na sprite editor. Otvorí sa nám okno, kde môžeme sprity upravovať.

Sprity môžeme rozdeliť niekoľkými spôsobmi.

Prvý spôsob je myšou. Môžeme si myšou zvoliť ľubovoľné oblasti a tie sa nám následne "rozrežú" na samostatnej sprity. Po kliknutí na Slice máme ďalšie možnosti. Buďto automaticky, pričom výsledné automatické upravenie môžeme ľubovoľne meniť, ak chceme. Ďalej môžeme zvoliť Grid. Sprity, ktoré som vám dodal, majú 100x100 pixelov. Keďže poznáme rozmer, zvolíme poslednú možnosť, teda Grid. Nastavíme hodnoty X a Y na 100 a klikneme na Slice a Apply. V tento moment máme obrázok rozrezaný na menšie podobrázky s rozmermi 100x100 pixelov. Teraz môžeme pracovať s jednotlivými časťami.

Tvorba 2D arkády pre Android v Unity

Keď si jeden zo spritov pretiahneme do scény a zväčšíme ho, vidíme, že nie je pekný. To vyriešime tak, že si na našom pôvodnom obrázku nastavíme Max size na 4096 a potvrdíme.

Hranice mapy

Teraz si vytvoríme tzv. Prefab, ktorý bude slúžiť ako náš strop a podlaha. Prefab je objekt, ktorý chceme používať viackrát a nechceme ho zakaždým nastavovať (možno ste niekedy počuli o pojme prototyp, princíp je podobný).

Na scénu si pretiahneme teda modrú vodorovnú časť a vynulujeme jej pozíciu. Scale X nastavíme na 1.05. Ak by sme to neurobili, vznikali by nám nepekné medzery medzi sprity. Objekt si premenujeme na podlaha. Aby sme náš objekt uložili, stačí ho pretiahnu späť do Assets. Rovno k tomu využijeme našej zložku Prefab/. Ak nám meno objektu zmodrie, znamená to, že je uložený ako Prefab. To isté urobíme pre strop.

Teraz, keď na scéne bude ľubovoľný počet týchto spritov a náš objekt upravíme, zmení sa nám všetky. Na náš sprite na scéne pridáme Box Collider 2D (pretože je obdĺžnikový) a ak je to potrebné, upravíme si jeho veľkosť a aplikujeme. Zmeny aplikujeme kliknutím na Overrides a ďalej na Apply all:

Tvorba 2D arkády pre Android v Unity

Mapa

Sprite máme pripravený. Teraz si môžeme vytvoriť základ pre mapu. Vytvoríme si niečo podobné ako je na obrázku nižšie:

Tvorba 2D arkády pre Android v Unity

"Tunel" si urobme dostatočne dlhý, aby bol cez celú obrazovku. Objekt môžeme pohodlne kopírovať cez Ctrl + D a pohodlne presúvať po jednotkách, ak držíme Ctrl. Ďalej si vytvoríme prázdny gameObject, vyresetuje jeho pozíciu a pomenujeme ho Borders1. Všetky sprity si presunieme pod tento objekt. Z Borders1 si tiež vytvoríme Prefab.

Posun mapy

Budeme chcieť, aby sa naše ohraničenie posúvalo spoločne s hráčom po osi X. Tak sa nikdy nestane, že by z mapy vyšiel. Pridáme si teda na Borders1 skript FollowPlayer. Jeho kód bude nasledujúce:

public Transform playerRef; // veřejný odkaz na našeho hráče, přesněji jeho Transform
Vector2 pos;

bool error = false;

void Start()
{
    if (playerRef == null)
        error = true;       // pokud zapomeneme přiřadit, nastavíme error na true
}

void Update()
{
    if (error)
        return; // nebude se provádět Update()

    // transform.position = new Vector2(playerRef.position.x, playerRef.position.y);  Dělá to samé, co kód níže, doporučuji používat spíše druhou možnost

       pos = transform.position; // pozice objektu, na kterém je skript

       pos.x = playerRef.position.x; // pozici na ose X nastavíme stejnou jako má hráč

       transform.position = pos; // nastavení pozice objektu, na kterém je skript na pozici pos
}

Prekážka

Teraz, ak hru spustíme, vidíme, že sa pohybuje spoločne s hráčom aj mapa.

Aby sme ale nelietali iba prázdnym tunelom, pridáme aj prekážku. Sprite máte tiež priložený k stiahnutiu. Farbu si dáme zatiaľ napríklad na modrú, aby nám ladil s ohraničením.

Prekážke pridáme tentoraz Edge Collider 2D, pretože už nie je len obdĺžniková. Ak chceme Collider upraviť, držíme Shift a upravujeme zelenú čiaru znázorňujúci Collider, kým nám nevznikne niečo podobné. Objekt si pridáme do Prefab a pomenujeme ho Stalag:

Tvorba 2D arkády pre Android v Unity

Generovanie mapy

Poďme si teraz do mapy prekážky vygenerovať. Za to by mal byť zodpovedný nejaký objekt. Vytvoríme si teda nový GameObject a pomenujeme si ho StartingObject, to pretože sa jeho skript bude vykonávať pri štarte hry. Pridáme na neho nový skript StartScript s nasledujúcim obsahom:

public GameObject stalagPrefab;
public float distance = 10; // vzdálenost mezi jednotlivými stalagy
public float offset = 1;
public int count = 50;

void Start()
{
    for (int i = 0; i < count; i++)
    {
        Vector2 pos = new Vector2();
        pos.x = offset + i * distance;
        GenerateStalag(pos);
    }
}

void GenerateStalag(Vector2 p)
{
    Instantiate(stalagPrefab, p, Quaternion.identity);
}

Instantiate(stalagPrefab, p, Quaternion.identity) nám generuje nové objekty na zadanej pozícii. Tretí parameter slúži pre rotáciu.

Nesmieme zabudnúť priradiť náš stalagmit do Stalag Prefab.

Po zapnutí by sa nám malo vygenerovať 50 stalagmitov.

Pokračovať budeme zas nabudúce, v lekcii Unity (C #) Android: Generovanie Stalag, 2. časť .


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 485x (92.84 kB)

 

Predchádzajúci článok
Unity (C #) Android: Pohyb, grafika, particles
Všetky články v sekcii
Tvorba 2D arkády pre Android v Unity
Preskočiť článok
(neodporúčame)
Unity (C #) Android: Generovanie Stalag, 2. časť
Článok pre vás napísal Jan Kubice
Avatar
Užívateľské hodnotenie:
1 hlasov
Aktivity