Hledáme fulltime PHP programátora do ITnetwork týmu - 100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!
Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 50% výuky zdarma!
JavaScript týden

Lekce 9 - Unity (C#) Android: Přestavba, bodáky

V minulé lekci, Unity (C#) Android: MenuPart, Eraser, pozadí 2, jsme vylepšili odstraňování překážek, detekci objektu a přidali levely.

Vítám vás u dalšího Unity3D tutoriálu, kde vytváříme vlastní hru pro Android. Dnes upravíme mapu, pohyb hráče a pozměníme i způsob, jakým se nám posouvají překážky.

Vylepšení particle systému

Nejdříve ale uděláme drobnou změnu v našem Particle Systému, který jsme si vytvořili pro rozbíjení stalagů. Oproti minule si nastavíme navíc ještě Start Color, kterou zvolíme modrou. Také Shape změníme na Sphere o radiusu 2. A abychom docílili hezčího efektu, aktivujeme Rotation over Lifetime, malou šipkou napravo zvolíme Random Between Two Constants a hodnoty nastavíme na -180180. Tím zajistíme, aby se nám particly trochu otáčely a nevypadaly tak staticky:

Nová překážka

Začneme úpravou mapy. Aby to hráč neměl tak jednoduché a trochu se u hraní zapotil, přetvoříme si strop, na který přidáme bodáky. Na konci článku zas máte základní grafiku ke stažení. Bodáky si naimportujeme do Unity.

Bodákům dále přidáme collider. Můžeme si zvolit hodně colliderů, přes které to uděláme, ale nám postačí box collider2D. Roztáhneme ho, aby pokrýval celý sprite. Dále také nastavíme Tag na Wall. Vytvoříme si z toho prefab:

Nebudeme chtít, aby se s námi bodáky hýbaly podobně, jako se hýbe mapa. Nevypadalo by to moc hezky, protože by vlastně letěly s námi. Proto je budeme generovat podobně jako stalagy. Nejdříve si bodáky třeba 30x nakopírujeme vedle sebe:

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

To prozatím stačí. Dále je budeme za Eraserem posouvat zpět za obrazovku, stejně jako pozadí, čímž docílíme nekonečného efektu, i když jich bude stále jen 30.

Úprava pohybu

Nyní si předěláme pohyb hráče. Když hrajeme, kamera i hráč jsou připoutány k sobě a hráč se stále nachází ve středu. To změníme a uděláme, aby se kamera nepohybovala ve směru osy Y, ale pouze po ose X. Docílíme toho tak, že kameru oddělíme od hráče. Také Eraser si oddělíme od hráče pro použití dále:

Skript kamery

Do kamery si přidáme skript CameraFollow, díky kterému bude kamera následovat hráče:

public Transform playerRef;
public bool withOffset;
public int offset;

// Update is called once per frame
void Update()
{
    Vector3 pos = transform.position;
    Vector3 newPos = playerRef.position;

    if (withOffset)
        newPos.x += offset;


    newPos.z = pos.z;
    newPos.y = pos.y;
    transform.position = Vector3.Lerp(transform.position, newPos, 1f);
}

V tomto skriptu nás již nic nepřekvapí kromě funkce Lerp(). Tato funkce zajišťuje plynulý pohyb z bodu A do bodu B. Posledním parametrem říkáme, jak plynule se bude daný objekt posouvat. Jediné, na co nesmíme zapomenout po dodělání skriptu, je přiřadit hráče do proměnné playerRef.

Dále Eraser objektu přidáme také tento skript a za playerRef přiřadíme také Player. Offset nastavíme podle toho, jak vzadu máme Eraser na mapě posunutý na ose Y a odškrtneme WithOffset. V mém případě mám offset nastavený na -25. Eraseru dále také přidáme Rigidbody2D, na kterém nastavíme gravitaci na 0 fixneme úhly:

Skript Eraseru

Eraseru dále upravíme skript, aby posouval jak zdi, tak pozadí. Skript tedy bude vypadat následovně:

void OnTriggerEnter2D(Collider2D col)
{
    if(col.CompareTag("Stalag"))
    {
        if(col != null)
            Destroy(col.gameObject);
    }


    if(col.CompareTag("Wall") || col.CompareTag("Background"))
    {
        col.SendMessage("Move");
    }
}

Kontrolujeme zde, zda se Eraser setkal se zdí a nebo s pozadím, dle toho daný objekt posune.

Aby nám vše fungovalo jak má, přidáme Prefabu našich bodáků skript BGMover a trochu BGMover poupravíme, aby fungoval pro náš nový účel. Odmažeme náš TriggerEnter a přidáme tam tuto metodu:

public int count;

void Move()
{
    Bounds b = GetComponent<SpriteRenderer>().bounds;
    float sizeX = b.size.x;

    Vector3 pos = transform.position;
    pos.x += count * sizeX - 10;
    transform.position = pos;
}

Jelikož jsme skript původně používali pouze na pozadí, tak by nám nefungoval na naši novou překážku, která by se neposouvala o požadovaný kus. Tudíž si zavádíme novou proměnnou count, kterou velikost daného objektu budeme násobit. Tudíž na pozadí tuto hodnotu nastavíme na 2, jak bylo původně ve skriptu a pro bodáky nastavíme 30, jelikož jsme si vytvořili 30 kopií bodáků vedle sebe.

Hru můžeme spustit a vyzkoušet.

V příští lekci, Unity (C#) Android: Start, Skóre, PlayerPrefs, se podíváme na počítání skóre při zdolání překážky a také na počkání na startu, dokud hráč nezačne hrát.


 

Stáhnout

Staženo 39x (8.59 kB)

 

Předchozí článek
Unity (C#) Android: MenuPart, Eraser, pozadí 2
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 (11)

 

 

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