Benefit portál
Pouze tento týden sleva až 80 % na e-learning týkající se Swift
30 % bodů zdarma na online výuku díky naší Slevové akci!

Lekce 6 - Unity (C#) Android: GUI - Menu 2

V minulé lekci, Unity (C#) Android: GUI - Menu 1, jsme se zabývali vytvářením GUI kódem.

V dnešním Unity tutoriálu si ukážeme další možnosti jak vytvořit herní menu. Již jsme menu vytvářeli pomocí kódu s trochou programování, tentokrát si jej v podstatě jen naklikáme.

Pro tyto účely si vytvoříme novou scénu, kterou si pojmenujeme Menu2, a otevřeme ji.

Canvas

Abychom si mohli přidat do naší hry pár těch tlačítek, nejdříve musíme do scény přidat Canvas. To je v podstatě plátno, do kterého vkládáme naše prvky bez složitějšího programování a nebo čehokoliv jiného. Je to vlastně taková placatá obrazovka, kterou do hry vložíme a na které můžeme něco zobrazovat.

Pravým tlačítkem klikneme do prostoru, kde se nachází Main Camera, dále UI a zvolíme Canvas:

Společně s Canvas se nám přidá i EventSystem. Ten ponecháme tak, jak je, a prozatím si ho všímat nemusíme.

Nastavení Canvas

Nejdříve si ale náš Canvas musíme nastavit:

Render Mode

Render Mode nám říká, jak chceme, aby se naše okno vykreslovalo.

  • Screen Space - Camera vykresluje vždy na kameru. To znamená, že se prvky "přichytí" ke kameře a hýbou se stejně jako se hýbe kamera. To je vhodné například na různá menu, ukazatele zdraví a podobně.
  • World space se využívá například když chceme, abychom někde ve světě měli texty, obrázky a tak, aniž by byly přichycené na kameru.
  • A ve finále tu máme Screen Space - Overlay. Tento mód funguje podobně jako Screen Space - Camera, ale místo "přichycení se" ke kameře jednoduše vykresluje canvas na obrazovku, jako by pod ní ani nebyla žádná hra. Od obrazu pak nejde nastavit např. nějakou vzdálenost nebo sklon, zkrátka si kamery nevšímá.

My využijeme Screen Space - Camera. V Render Camera musíme určit na jakou kameru se naše prvky přichytí.

Order in Layer

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Další podstatná věc, kterou můžeme využít častěji, je Order in Layer. Jelikož můžeme mít Canvas prvků teoreticky neomezeně, tak nám toto číslo říká, jak se mají přes sebe zobrazovat. Čím menší číslo, tím více vespod canvas bude.

UI Scale Mode

Dále, aby naše hra byla hezká na všech velikostech monitorů, musíme zařídit, aby se náš Canvas roztáhl jak potřebujeme. K tomu slouží UI Scale Mode, který nastavíme na Scale With Screen Size. Tím se Canvas roztáhne vždy na velikost monitoru, na kterém hra právě běží. To od menu také očekáváme.

Reference Resolution

Ve finále nastavíme Reference Resolution na rozlišení našeho monitoru. Tím jen říkáme, jaká je referenční velikost monitoru. Pro naše účely tudíž postačí nastavit naše rozlišení, aby se nám pracovalo trochu pohodlněji:

Tlačítka

Když již máme nejdůležitější prvky nastavené, můžeme se vrhnout na přidání tlačítek:

Po kliknutí na Button se nám zobrazí tlačítko. Když hru spustíme a klikneme, samozřejmě zatím nic nedělá.

Nastavení tlačítka

Pokud přejdeme do inspektoru našeho tlačítka, můžeme si povšimnout pár nastavení. Abychom docílili stejného efektu jako v minulém menu, nastavíme si sprite Source Image na náš požadovaný sprite a následně si Transition nastavíme na Sprite Swap, pokud již tak není nastaveno. To nám zaručí, že se budou měnit sprity pro různé akce. Dále již stačí pouze zvolit jaký chceme Pressed Sprite.

Teď, když scénu spustíme a klikneme na naše tlačítko, vidíme stejný grafický výsledek jako v minulém menu. Jenže stále se nic neděje.

Funkce tlačítka

Pokud se podíváme na samotný spodek Inspectoru tlačítka, můžeme si všimnout okénka s nadpisem On Click(). To je v podstatě metoda, která se zavolá pokaždé, když je na tlačítko kliknuto. Pokud klikneme na malinké "+" vpravo dole toho okénka, zobrazí se nám možnost nastavit skript, který se má spustit:

Pro tyto účely si vždy vytvoříme prázdné GameObjecty, které pojmenujeme podle toho, jaké skripty sdružují a na tyto GameObjecty dáváme skripty na tlačítka.

Jeden takovýto objekt si vytvoříme. Pojmenujeme si ho ScriptObject:

Připneme na něj náš Reaction Script:

Zároveň, aby naše metody v Reaction Scriptu byly vidět, musíme všechny předělat na public. Je to z toho důvodu, že k našim metodám budeme přistupovat zvenku:

public void ClickedArcade()
{
    print("clicked Arcade");
}

public void ClickedSurvival()
{
    print("clicked Survival");
}

public void ClickedExit()
{
    print("clicked Exit");
}

Když nyní najedeme zas na tlačítko, stačí náš ScriptObject vložit do kolonky None (Object):

Dále klikneme na No Function a vybereme si náš skript a požadovanou metodu:

Aby bylo vše hotovo, stačí již jen změnit text tlačítka. To uděláme rozbalením našeho tlačítka, kde uvidíme Text. Na ten klikneme a můžeme si nastavit požadovaný text na našem tlačítku. Pokud se chceme vyblbnout, můžeme si nastavit dále i fonty, barvy a podobně, nám ale postačí jen text. Tlačítko si pro přehlednost ve scéně pojmenujeme Arcade a také, aby nám názvy tlačítek seděly s minulým tutoriálem. A máme hotovo.

Když scénu spustíme, klikneme na tlačítko můžeme vidět, že se nám do konzole vypisuje požadovaný text ze skriptu. Takovýmto způsobem můžeme naprogramovat libovolné metody s libovolnou funkcí.

Proces zopakujeme pro zbývající dvě tlačítka a výsledek máme naprosto stejný:

Závěr

Ještě nevím, jaký způsob vytváření menu a GUI prvků budu volit do dalších lekcí, ale je to v podstatě jedno. Žádný z ukázaných způsobů nemá žádné extra výhody ani nevýhody a někdo může být rád, když si může vše vytvořit sám kódem a mít vše pod kontrolou. Tímto bych dnešní lekci ukončil.

V příští lekci, Unity (C#) Android - MenuPart, Eraser a pozadí, se budeme zabývat odstraňováním již zdolaných překážek a také nekonečným opakováním pozadí. Přidáme i další herní menu.


 

Předchozí článek
Unity (C#) Android: GUI - Menu 1
Všechny články v sekci
Tvorba 2D arkády pro Android v Unity
Článek pro vás napsal Jan Kubice
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Aktivity (4)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!