Lekce 4 - Unity (C#) Android: Generování stalagů
Vítám vás u dalšího tutoriálu na 2D hru pro Android v Unity. V minulé lekci, Unity (C#) Android: Pohyb, grafika, particles, jsme naprogramovali pohyb hráče a přidali základní grafiku hry.
V dnešní lekci nás čeká vytvoření mapy. K tomu si můžeme zvolit dva možné způsoby. Buďto můžeme tvořit mapy sami, tím pádem bychom tvořili spíše levely, a nebo můžeme vygenerovat mapu automaticky a mít nekonečnou mapu jako má například hra Flappy bird. My si zvolíme možnost druhou.
Sprity
Dnes začneme tím, že si na mapě uděláme dlouhou cestu, zatím ručně. Automaticky generovat budeme až překážky:

Stáhněte si prosím několik následujících obrázků:




Obrázky si naimportujeme do Unity.
Hranice mapy
Nyní si vytvoříme tzv. Prefab, který bude sloužit jako náš strop a podlaha. Prefab je objekt, který chceme používat vícekrát a nechceme ho pokaždé nastavovat (možná jste někdy slyšeli o pojmu prototyp, princip je podobný).
Na scénu si přetáhneme modrou vodorovnou část a vynulujeme její pozici.
Scale X nastavíme na 1.05
. Pokud bychom to neudělali, vznikaly by
nám nehezké mezery mezi sprity. Objekt si přejmenujeme na floor
.
Abychom náš objekt uložili, stačí ho přetáhnou zpět do Assets. Rovnou k
tomu využijeme naší složku Prefab/
. Pokud nám jméno objektu
zmodrá, znamená to, že je uložený jako Prefab. To samé uděláme pro
strop, přičemž objekt si pojmenujeme ceiling
.
Teď, když na scéně bude libovolný počet těchto spritů a náš objekt upravíme, změní se nám všechny. Na náš sprite na scéně přidáme Box Collider 2D (protože je obdélníkový) a pokud je to potřeba, upravíme si jeho velikost a aplikujeme. Změny aplikujeme kliknutím na Overrides a dále na Apply all:

Mapa
Sprite máme připravený. Nyní si můžeme vytvořit základ pro mapu. Vytvoříme si něco podobného jako je na obrázku níže:

"Tunel" si udělejme dostatečně dlouhý, aby byl přes celou obrazovku.
Objekt můžeme pohodlně kopírovat přes Ctrl + D a
pohodlně přesouvat po jednotkách, pokud držíme Ctrl. Dále si
vytvoříme prázdný gameObject, vyresetujeme jeho pozici a pojmenujeme jej
Borders
. Všechny sprity si přesuneme pod tento objekt. Z
Borders
si také vytvoříme Prefab.
Posun mapy
Budeme chtít, aby se naše ohraničení posouvalo společně s hráčem po
ose X. Tak se nikdy nestane, že by z mapy vyjel. Přidáme si tedy na
Borders
skript FollowPlayer
. Jeho kód bude
následující:
public Transform playerRef; // veřejný odkaz na našeho hráče, přesněji jeho Transform Vector2 pos; void 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 }
Překážka
Nyní, pokud hru spustíme, vidíme, že se pohybuje společně s hráčem i mapa.
Aby jsme ale nelétali pouze prázdným tunelem, přidáme i překážku. Sprite máte rovněž přiložený ke stažení. Barvu si dáme zatím například na modrou, aby nám ladil s ohraničením.
Překážce přidáme tentokrát Edge Collider 2D, protože již není jen
obdélníková. Pokud chceme Collider upravit, držíme Shift a
upravujeme zelenou čáru znázorňující collider, dokud nám nevznikne něco
podobného. Objekt si přidáme do Prefabu a pojmenujeme jej
Stalag
:

Generování mapy
Pojďme si nyní do mapy překážky vygenerovat. Za to by měl být
zodpovědný nějaký objekt. Vytvoříme si tedy nový GameObject a pojmenujeme
si ho StartingObject
, to protože se jeho skript bude provádět
při startu hry. Přidáme na něj nový skript StartScript
s
následujícím obsahem:
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 zadané pozici. Třetí parametr slouží pro rotaci.
Nesmíme zapomenout přiřadit náš stalagmit do Stalag
Prefab:

Po zapnutí by se nám mělo vygenerovat 50 stalagmitů.
Pokračovat budeme zas příště, v lekci Unity (C#) Android: Generování stalagů, 2. část.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkamiStaženo 517x (92.84 kB)