Java týden První novoroční výprodej
Hledáš brigádu v IT, která bude 100 % home office a 100 % flexibilní? Pak napiš na: redakce [zavináč] itnetwork.cz pro více info!
80 % bodů zdarma díky akci Black Friday! Tento týden rovněž sleva na e-learning Java až 80 %

Lekce 2 - Unity (C#) Android: Pohyb, grafika, particles

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítám vás u dalšího dílu tutoriálu pro Unity, kde se naprogramujeme pohyb hráče a trochu té grafiky.

Minule, v lekci Unity (C#) Android: Nastavení prostředí, jsme si nastavili scénu tak, abychom mohli hru buildnout na Android a spustit. V dnešním díle se podíváme na přípravu hráče, jeho fyziku a particles.

Pozadí

Začneme tím, že si do Unity přidáme nějaký obrázek jako pozadí, aby bylo vidět, že se pohybujeme. Sprity si do Unity naimportujeme podobně jako jsme v minulém díle tvořili složky. Obrázek pozadí si tedy vložíme do naší složky s grafikou. Můžeme si stáhnout libovolný z internetu, který se nám líbí. Ideální by bylo, aby měl rozlišení aspoň 1920x1080, díky tomu naše pozadí bude vypadat hezky a ostře:

Začneme s tím, jak si přidat sprite do scény. Prvně přidáme sprite do naší složky. Pokud ho tedy chceme přidat do scény, jednoduše ho z ní přetáhneme na scénu. Naším obrázkem můžeme také ve scéně hýbat. Obrázek si zvětšíme, aby zabíral celou plochu hry. To uděláme tak, že na něj klikneme ve scéně kolem Spritu, čímž se nám objeví ohraničení s tečkami v rozích. Stačí za nějakou část táhnout a obrázek zvětšíme. Nebo můžeme Sprite zvětšit přes komponentu Transform na objektu. Jestli je přes celou naši hrací plochu zjistíme, pokud se například přepneme do okna Game:

Hráč

Dále budeme pokračovat přidáním hráče.

Vytvoření

Začneme tím, že si vytvoříme prázdný objekt. Stačí kliknout pravým tlačítkem do pravé části, kde se například nachází i naše kamera, a zvolit Create Empty. Objekt vynulujeme, aby byl na nulových souřadnicích. Klikneme si tedy na náš objekt a napravo vidíme všechny komponenty, které na sobě má. Vynulujeme jej tak, že klikneme na ozubené kolečko v kolonce Transform a zde zvolíme Reset. Rovnou si objekt pojmenujeme Player.

Dále, jelikož budeme chtít současný pohyb kamery s hráčem, přesuneme kameru pod hráče.

Grafika

Sice jsme si vytvořili hráče, ale stále nic nevidíme, jelikož hráč nemá žádnou grafiku. Pokud chceme, můžeme si obrázek sami vytvořit a nebo stáhnout, což bude pro naše účely dostačující. Já jsem si například stáhl ohnivou kouli, ale co si zvolíte vy nechám na vašich představách.

Naši partneři možná hledají právě tebe!

Grafiku na hráče přidáme kliknutím na Add Component na objektu a najdeme si Sprite Renderer. Poté stačí náš obrázek pouze přetáhnout do kolonky Sprite. Obrázek bude pravděpodobně moc velký, tak si ho zmenšíme.

Fyzika hráče

Když již máme hráče ve hře, můžeme začít přidávat fyziku a trochu si s ním hrát. Každý objekt, který má s něčím interagovat, potřebuje collider, který pak umožňuje Unity zjistit, zda se hráč s něčím střetl. Tudíž našemu hráči přidáme komponentu Circle Collider 2, ta bude s hráčem pracovat jako by byl kruh. Jelikož jsme ve 2D, musíme si dávat vždy pozor na to, aby za naším colliderem bylo napsáno 2D, jinak nebude fungovat správně a nebo vůbec. Dále, aby měl hráč vlastní fyziku, musíme přidat Rigidbody 2D. V tento okamžik, když hru spustíme, hráč spadne dolů.

V Rigidbody máme několik atributů, kterými se prozatím zabývat nebudeme a dostaneme se k nim až časem.

První skript

Budeme pokračovat skriptem na pohyb hráče. Jelikož bude naše hra na styl Flappy Bird, tak se bude ovládat jedním tlačítkem, kliknutím myši a nebo dotykem na telefonu. Abychom mohli hrát kdekoliv, budeme podporovat všechny tři varianty ovládání najednou.

Skript můžeme přidat buď přes Add Component, kde napíšeme název skriptu, a nebo můžeme v naší vytvořené složce se skripty kliknout pravým tlačítkem myši, následně v menu vybrat Create a poté C# Script.

Skript si pojmenujeme PlayerMov. Na skript dvakrát poklepeme a otevře se nám editor.

Události

Co se týče programování, Unity funguje na principu událostí. Máme vždy nějakou metodu, která se spustí za určité události, např. na začátku - Start() a Awake(). Rozdíly si povíme později. My v našem skriptu použijeme událost Update(). Je to smyčka, která se vykonává několikrát za sekundu.

Vytvoříme si nové proměnné, které budeme potřebovat. Abychom s naší postavou "flappovali" (pohybovali se), budeme potřebovat hodnotu typu Vector3, kterou si například pojmenujeme vel (jako velocity = rychlost). Vector3 je jeden z parametrů rigidbody a udává změnu směru za jeden frame.

Teď musíme zajistit, aby například při stisknutí klávesy náš hráč popolétl:

float flapAmount = 10;
void Start()
{

}
// Update is called once per frame
void Update()
{
    Vector3 vel = gameObject.GetComponent<Rigidbody2D>().velocity;
    if (Input.GetMouseButtonDown(0))
    {
        vel.y = flapAmount;
    }
    gameObject.GetComponent<Rigidbody2D>().velocity = vel;
}

V tento moment, když naši hru spustíme a budeme klikat, můžeme vidět, že náš hráč opravdu skáče namístě a padá. Můžeme si všimnout, že skáče poměrně vysoko. To můžeme vyřešit snížením flapAmount v našem skriptu a nebo zvýšením gravitace na Rigibody2D našeho hráče například na 2.5. Dále musíme zařídit pohyb dopředu. V našem kódu si založíme novou proměnnou speed a nastavíme si ji například na 2. Bude to fungovat velice jednoduše. Pokaždé, když se provede Update(), posuneme se v ose x o naší hodnotu speed:

float flapAmount = 10;
float speed = 2;
void FixedStart()
{

}
// Update is called once per frame
void Update()
{
    Vector3 vel = gameObject.GetComponent<Rigidbody2D>().velocity;
    if (Input.GetMouseButtonDown(0))
    {
        vel.y = flapAmount;
    }
    vel.x = speed;
    gameObject.GetComponent<Rigidbody2D>().velocity = vel;
}

Může se stát, že se nám hráč bude při pohybu nepříjemně otáčet, ale to můžeme vyřešit velice jednoduše, když si v Rigibody2D našeho hráče zaškrtneme Fixed Angle. Co se týče pohybu máme zatím vše hotovo. Teď se můžeme začít soustředit na grafiku.

Particle effect

Řekli jsme si, že budeme hrát za ohnivou kouli a chceme, aby z ní šlehaly pořádné plameny. To zařídíme přidáním Particle Systemu pod našeho hráče. To můžeme udělat kliknutím na našeho hráče pravým tlačítkem myši, dále na effects a Particle System:

Particle system je přímo součást Unity, která zařizuje generování částic. Po vhodném nastavení může efekt vypadat jako oheň, déšť, dým a spousty dalšího. My si ukážeme pouze oheň. Pokud by někteří z vás rádi experimentovali, tak doporučuji například vodní kouli a různé pokusy s nastavením pro ideální vzhled. Pojďme se do toho pustit.

Náš Particle System si otočíme v ose X na 180 a pozici Z nastavíme na 20:

Vytvoříme si nový materiál. Pravým tlačítkem myši klikneme do okénka Assety -> Create -> Material. Pojmenujeme si ho například FireMat. Nastavíme typ Materiálu, kliknutím na Shader -> Legacy Shaders -> Particles -> Additive. Potřebujeme vložit obrázek, který se bude vykreslovat. Stáhneme si tedy obrázek ohně a vložíme ho do volného okénka:

Materiál vložíme do našeho particle systemu. Klikneme si na náš particle system, kde najdeme Renderer a vložíme ho do řádky material. Dále si nastavíme Color over time. To funguje způsobem, že během toho, co je částice řekněme "naživu", mění svou barvu. Podobnou věc uděláme s Rotation over time, aby náš oheň nebyl tolik statický. Oheň vylepšíme snížením počtu particlů v Emission. Dále v Shape nastavíme menší radius a v samotném Particle systemu nastavíme menší Start Size, menší Start Speed a zmenšíme i Start Lifetime, což je doba existence každé částice:

Pokud bychom s výsledkem po spuštění nebyli spokojení, stačí si s nastavením libovolně pohrát, čímž můžeme docílit mnohem hezčího efektu.

Závěr

Pro dnešek to bude vše. Doufám, že se vám série tutoriálů líbí a naučili jste se něco nového. Pokud máte nějaké připomínky či nápady, zanechte komentář, rád se inspiruji. Příště, v lekci Unity (C#) Android: Generování stalagů, se podíváme na vytváření naší mapy.


 

 

Aktivity (2)

 

 

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í!