IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

9. diel - Unity (C #) Android: Prestavba, bodáky

V minulej lekcii, Unity (C #) Android: MenuPart, Eraser, pozadia 2 , sme vylepšili odstraňovanie prekážok, detekciu objektu a pridali levely.

Vítam vás u ďalšieho Unity3D tutoriálu, kde vytvárame vlastnú hru pre Android. Dnes upravíme mapu, pohyb hráča a zmeníme a doplníme aj spôsob, akým sa nám posúvajú prekážky.

Vylepšenia particle systému

Najskôr ale urobíme drobnú zmenu v našom Particle Systému, ktorý sme si vytvorili pre rozbíjanie Stalag. Oproti minule si nastavíme naviac ešte Start Color, ktorú zvolíme modrú. Tiež Shape zmeníme na Sphere o rádiusu 2. A aby sme docielili krajšieho efektu, aktivujeme Rotation over Lifetime, malou šípkou napravo zvolíme Random Between Two constants a hodnoty nastavíme na -180180. Tým zaistíme, aby sa nám Particle trochu otáčali a nevyzerali tak staticky:

Tvorba 2D arkády pre Android v Unity

Nová prekážka

Začneme úpravou mapy. Aby to hráč nemal tak jednoduché a trochu sa u hraní zapotil, pretvoríte si strop, na ktorý pridáme bodliaky. Na konci článku zas máte základnú grafiku k stiahnutiu. Bodliaky si importuje do Unity.

Bodliakom ďalej pridáme Collider. Môžeme si zvoliť veľa Collider, cez ktoré to urobíme, ale nám postačí box collider2D. Roztiahneme ho, aby pokrýval celý sprite. Ďalej tiež nastavíme Tag na Wall. Vytvoríme si z toho prefab:

Tvorba 2D arkády pre Android v Unity

Nebudeme chcieť, aby sa s nami bodliaky hýbali podobne, ako sa hýbe mapa. Nevyzeralo by to veľmi pekne, pretože by vlastne leteli s nami. Preto ich budeme generovať podobne ako Stalag. Najskôr si Spiky treba 30x nakopírujeme vedľa seba:

Tvorba 2D arkády pre Android v Unity

To zatiaľ stačí. Ďalej je budeme za Ereserem posúvať späť za obrazovku, rovnako ako pozadie, čím docielime nekonečného efektu, aj keď ich bude stále len 30.

Úprava pohybu

Teraz si prerobíme pohyb hráčov. Keď hráme, kamera i hráč sú pripútané k sebe a hráč sa stále nachádza v strede. To zmeníme a urobíme, aby sa kamera nepohybovala v smere osi Y, ale iba po osi X. Docielime toho tak, že kameru oddelíme od hráča. Tiež Ereser si oddelíme od hráčov pre použitie ďalej:

Tvorba 2D arkády pre Android v Unity

Skript kamery

Do kamery si pridáme skript CameraFollowPlayer, vďaka ktorému bude kamera nasledovať hráča:

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

bool error = false;

void Start()
{
    if (playerRef == null)
        error = true;
}

// Update is called once per frame
void Update()
{

    if (error)
        return;
    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 skripte nás už nič neprekvapí okrem funkcie Lerp(). Táto funkcia zabezpečuje plynulý pohyb z bodu A do bodu B. Posledným parametrom hovoríme, ako plynulo sa bude daný objekt posúvať. Jediné, na čo nesmieme zabudnúť po dorobenie skriptu, je priradiť hráča do premennej playerRef.

Ďalej Ereser objektu pridáme tiež tento skript a za playerRef priradíme tiež Player. Offset nastavíme podľa toho, ako vzadu máme Ereser na mape posunutý na osi Y a Odznačte WithOffset. V mojom prípade mám offset nastavený na -25. Ereseru ďalej tiež pridáme Rigidbody2D, na ktorom nastavíme gravitáciu na 0 fixných uhly:

Tvorba 2D arkády pre Android v Unity

Skript Ereseru

Ereseru ďalej upravíme skript, aby posúval ako steny, tak pozadie. Skript teda bude vyzerať nasledovne:

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 tu, či sa Ereser stretol so stenou a alebo s pozadím, podľa toho daný objekt posunie.

Aby nám všetko fungovalo ako má, pridáme Prefab našich bodliaka skript BGMover a trochu BGMover poupravíme, aby fungoval pre náš nový účel. Odmazať náš TriggerEnter a pridáme tam túto metódu:

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;
}

Keďže sme skript ho pôvodne používali iba na pozadí, tak by nám nefungoval na našej novú prekážku, ktorá by sa neposúvala o požadovaný kus. Teda si zavádzame novú premennú count, ktorú veľkosť daného objektu budeme násobiť. Teda na pozadí túto hodnotu nastavíme na 2, ako bolo pôvodne vo skriptu a pre Spiky nastavíme 30, pretože sme si vytvorili 30 kópií spike vedľa seba.

Hru môžeme spustiť a vyskúšať.


 

Stiahnuť

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

Stiahnuté 314x (8.59 kB)

 

Predchádzajúci článok
Unity (C #) Android: MenuPart, Eraser, pozadia 2
Všetky články v sekcii
Tvorba 2D arkády pre Android v Unity
Preskočiť článok
(neodporúčame)
Unity (C #) Android: GUI - menu 2
Článok pre vás napísal Jan Kubice
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity