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:

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ě:

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:

Výsledek:

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:

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:

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:

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:

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:

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

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:

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:

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 262x (2.56 kB)
Aplikace je včetně zdrojových kódů v jazyce C# .NET