Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - 3D střílečka v Unity - Terén a pohyb hráče

V minulé lekci, Úvod do Unity 3D, jsme si řekli o programování 3D a 2D her v Unity.

V dnešním Unity 3D tutoriálu se naučíme vytvářet projekt, přidávat 3D objekty a k nim komponenty. Vytvoříme první skript pro pohyb hráče po terénu.

Vytvoření projektu

Po otevření Unity se nám zobrazí okno s názvem Unity Hub. Klikneme na tlačítko New. Poté se nám otevře nové okno s názvem Create a new project with Unity:

Vytvoření nového projektu v Unity - Tvorba 3D her v Unity

Projekt nazveme například RIGIDBODY_COMPONENT. Pokud nepotřebujeme projekt uložit do nějaké speciální složky, pak lokaci projektu můžeme nechat na výchozím nastavení. Pak už jen klikneme na tlačítko CREATE.

Poté se nám otevře samotný projekt, který vypadá následovně:

Nový projekt v Unity 3D - Tvorba 3D her v Unity

Projekt již obsahuje přímé světlo Directional Light, které je tvořené bodem, jenž má určitý dosah. V tomto případě si ho můžeme představit jako slunce.

Zároveň projekt obsahuje předvytvořenou kameru Main Camera. Kamera může být později smazána nebo vytvořena další. V případě více kamer se musí nastavit, která se bude zobrazovat v danou chvíli jako hráčův pohled. To můžeme nastavit v záložce Inspector (vlastnostech) nebo je možné ji přepínat z vytvořeného skriptu. Nyní ovšem zachováme současnou scénu jak je.

Terén

Vytvoříme si náš první objekt - terén. Vytvoříme ho tím způsobem, že přejdeme kurzorem do okna Hierarchy (šedé pole, které obsahuje SampleScene). Klikneme zde pravým tlačítkem myši a objeví se nám možnosti co do scény přidat. Zvolíme 3D Object a klikneme levým tlačítkem na Terrain:

Přidání terénu do 3D hry v Unity - Tvorba 3D her v Unity

Výsledek:

Terén v 3D hře v Unity - Tvorba 3D her v Unity

Hráč

Po čem chodit bychom měli :-) Nyní vytvoříme stejným způsobem jakýkoliv 3D objekt, který bude naším hráčem.

Klikneme tedy pravým tlačítkem myši do okna Hierarchy a zvolíme 3D Object. Vybereme si 3D object Capsule, tj. objekt tvaru kapsle, který nám bude představovat našeho hráče. Pozici osy Y hráče nastavíme o trochu větší, než ji má terén. Pokud by byla stejná jako náš terén, tak by se nám objekty ve hře objevily v sobě. Osa Y se nastavuje pomocí desetinných čísel. Ose Y nastavíme hodnotu o přibližně desetiny větší, než má hodnota, kterou zjistíme v záložce Inspector po kliknutí na Terrain:

Hráč v 3D hře v Unity 3D - Tvorba 3D her v Unity

Komponenta RIGIDBODY

Nyní přidáme hráči komponentu RIGIDBODY, která se stará o fyziku objektu. Díky tomu se náš hráč bude moci po terénu pohybovat, tedy až jej to naučíme.

V záložce Hierarchy, v levé části okna Unity, klikneme levým tlačítkem na objekt, který má být našim hráčem. V pravé části Unity se nám poté objeví záložka s názvem Inspector. Zde klikneme na Add Component:

Přidání komponenty objektu v Unity 3D - Tvorba 3D her v Unity

V seznamu vyhledáme komponentu RIGIDBODY.

Neklikejme na komponentu RIGIDBODY2D! Jedná se o stejnou komponentu, ale pro hry ve 2D.

Komponenty vybereme levým tlačítkem myši:

Přidání RIGIDBODY komponenty v Unity 3D - Tvorba 3D her v Unity

V komponentě RIGIDBODY rozklikneme záložku Constraints a zaškrtneme u všech os FREEZE ROTATION X,Y,Z, aby nám hráč nepadal, když na něj budeme působit silou).

Kamera

Nyní vybereme hlavní kameru Main Camera:

Vybrání hlavní kamery v Unity 3D - Tvorba 3D her v Unity

Objektu Main Camera nastavíme stejnou pozici jako našemu hráči.

Nemusíme přepisovat ručně. U objektu hráče klikneme na tři tečky a v komponentě TRANSFORM a dáme copy position. Následně stačí přepnout na druhý objekt, tentokrát na Main Camera. U komponenty TRANSFORM klikneme na tři tečky a vybereme paste position:

Nastavení pozice hlavní kamery - Tvorba 3D her v Unity

V okně Hierarchy přetáhneme kameru Main Camera na objekt hráče:

Přetažení kamery do hráče - Tvorba 3D her v Unity

První krůčky - Skript pro pohyb po terénu

Nyní vytvoříme skript na pohyb hráče po terénu. Opět klikneme na tlačítko Add Component. Do vyhledávacího pole napíšeme název skriptu např. Move. Klikneme na New script a Create and Add. Jakmile se nám v záložce Inspector u objektu objeví skript, dvakrát na něj klikneme levým tlačítkem, a tím ho otevřeme ve Visual Studiu:

První skript v Unity 3D - Tvorba 3D her v Unity

Vidíme, že se nám vygenerovaly hlavičky metod Start() a Update(). Zatímco metoda Start() se volá jednou na začátku, metoda Update() se volá u každého snímku.

Když má někdo 60FPS, tak se metoda Update() zavolá 60x za sekundu.

Vytvoření logiky skriptu Move

Začneme tak, že si do třídy Move, která reprezentuje náš skript, napíšeme proměnnou rb typu Rigidbody:

public class Move : MonoBehaviour
{
    Rigidbody rb;
}

Proměnná zastupuje naši komponentu RIGIDBODY.

Nyní se vrhneme na metody :-)

Metoda Start()

Na instanci transform zavoláme metodu GetComponent<T>(), které předáme generický typ Rigidbody. Z metody vrácenou komponentu typu Rigidbody si uložíme do naší proměnné rb:

void Start()
   {
       rb = transform.GetComponent<Rigidbody>();
   }
Metoda Update()

V této metodě si naprogramujeme hlavní logiku skriptu. Kód bude obsahovat čtyři podmínky. My si popíšeme první podmínku, podle které pak vložíme další podmínky.

První podmínka

V první podmínce zjistíme, jestli je klávesa D stisknutá:

void Update()
{
        if (Input.GetKey(KeyCode.D))
        {
            rb.AddForce(new Vector3(5, 0, 0));
        }
}

Metoda GetKey() nám vrátí hodnoty True nebo False podle toho, zda klávesa D KeyCode.D je stisknutá. V těle podmínky zavoláme na instanci rb metodu AddForce, která nám posune objekt po ose X o 5 souřadnic (čísel).

Metoda AddForce() nám umožňuje působit silou na objekt do jakékoliv strany, pomocí vektorů.

Další podmínky

Nyní stačí nakopírovat první podmínku a v nakopírovaných třech podmínkách změnit:

  • testované klávesy na A, W, S v metodě GetKey(),
  • vektor v metodě AddForce().

Celý kód třídy Move bude tedy vypadat takto:

public class Move : MonoBehaviour
{
    Rigidbody rb;

    void Start()
    {
        rb = transform.GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.D))
        {
            rb.AddForce(new Vector3(5, 0, 0));
        }
        if (Input.GetKey(KeyCode.A))
        {
            rb.AddForce(new Vector3(-5, 0, 0));
        }
        if (Input.GetKey(KeyCode.W))
        {
            rb.AddForce(new Vector3(0, 0, 5));
        }
        if (Input.GetKey(KeyCode.S))
        {
            rb.AddForce(new Vector3(0, 0, -5));
        }
    }
}

Uložíme skript a vyzkoušíme.

Spuštění hry

Hru spustíme pomocí ikony Play v okně Unity:

Spuštění hry v Unity 3D - Tvorba 3D her v Unity

To by bylo pro dnešní lekci vše. Dnes jsme se naučili vytvářet projekt, přidávat 3D objekty a k nim komponenty. Vytvořili jsme první skript, který nám zajišťuje pohyb hráče po herní ploše.

V další lekci, 3D střílečka v Unity - Otáčení kamery pomocí myši, se naučíme ovládat pohled herní postavy pomocí myši, zároveň definovat herní objekt novým způsobem a přidávat sílu v aktuálním směru os.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 221x (2.56 kB)
Aplikace je včetně zdrojových kódů v jazyce C# .NET

 

Předchozí článek
Úvod do Unity 3D
Všechny články v sekci
Tvorba 3D her v Unity
Přeskočit článek
(nedoporučujeme)
3D střílečka v Unity - Otáčení kamery pomocí myši
Článek pro vás napsal Tomáš Brabec
Avatar
Uživatelské hodnocení:
87 hlasů
Hodně zdaru programátoři všeho druhu,doufám ,že nikdy nezažijete nudu.
Aktivity