September discount week
Pouze tento týden sleva až 80 % na e-learning týkající se MS Office
50 % bodů zdarma na online výuku díky naší Slevové akci!

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

Vítejte v první lekci on-line kurzu, ve kterém si naprogramujeme svou první 3D střílečku v Unity. Půjde o hru z pohledu první osoby, tzv. FPS (First Person Shooter), což je zřejmě nejpopulárnější žánr 3D her.

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

Název si zvolte jaký je vám nejmilejší (pokud budete mít jiný název než zde já, nic se tím pro vás nemění). Já jsem pojmenoval projekt RIGIDBODY_COMPONENT. Lokaci projektu nechejte ve výchozím nastavení, pokud jej tedy nechcete ukládat do nějaké speciální složky. Pak už jen klikneme na CREATE.

Jakmile se nám otevřel náš projekt, vypadá následovně:

Nový projekt v Unity 3D

Projekt již obsahuje direct light (přímé světlo), 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. 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 Inspectoru (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

Výsledek:

Terén v 3D hře v Unity

Hráč

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

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. Já jsem zvolil Capsule (objekt tvaru kapsle). Nastavíme pozici Y hráče o trochu větší, než ji má terén, protože 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

Komponenta RIGIDBODY

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

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

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

V seznamu vyhledáme komponentu RIGIDBODY.

Pozor, neklikejte na RIGIDBODY2D!

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

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

Dále rozklikneme záložku Constraints v komponentě RIGIDBODY a nastavíme FREEZE ROTATION X,Y,Z (zaškrtneme jej u všech os z důvodu, aby nám pak hráč nepadal, když na něj budeme působit silou).

Nyní vybereme hlavní kameru:

Vybrání hlavní kamery v Unity 3D

Úprava kamery

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

Nastavení pozice hlavní kamery

Kameru Main Camera přetáhneme do objektu hráče tak, že ji přetáhneme v okně Hierarchy na objekt hráče:

Přetažení kamery do 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 Add Component a do vyhledávacího pole napíšeme název skriptu (já ho pojmenuji Move). Klikneme na New script a Create and Add. Jakmile se nám objeví skript u objektu v Inspectoru, dvakrát na něj klikneme levým tlačítkem a tím ho otevřeme ve Visual Studiu:

První skript v Unity 3D

Následně vložíme kód níže. Jeho jednotlivé části jsou popsané pomocí komentářů:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{
    Rigidbody rb; // proměnná, která zastupuje naši komponentu Rigidbody
    void Start()
    {
        rb = transform.GetComponent<Rigidbody>(); // definujeme rb jakou má hodnotu; transform je objekt, na který je skript napojen
        // funkce GetComponent() nám umožňuje získat komponentu jako proměnou, se kterou můžeme dále pracovat

    }

    // Update is called once per frame= tento skript se spouští každý snímek znovu a znovu pokud máte například 60fps(frames per second) skript se vám spustí 60krát za jednu sekundu.
    void Update()
    {
        if (Input.GetKey(KeyCode.D)) // využíváme podmínky, že pokud někdo stiskne klávesu W, tak se spustí tato podmínka, dokud bude klávesa zmáčknuta
        {
            rb.AddForce(new Vector3(5, 0, 0)); // Zde využíváme toho, že na proměnou přešly vlastnosti a metody komponenty RIGIDBODY.
            // Metoda AddForce() přidá sílu do určitého směru, který nastavujeme pomocí os x, y a z. Zde přidáme hodnotu síly 5 na osu x (do strany).
        }
        if (Input.GetKey(KeyCode.A))
        {
            rb.AddForce(new Vector3(-5, 0, 0));
            // Zde přidáme hodnotu síly -5 na osu x (do strany).
        }
        if (Input.GetKey(KeyCode.W))
        {
            rb.AddForce(new Vector3(0, 0, 5));
            // Zde přidáme hodnotu síly 5 na osu z (dopředu).
        }
        if (Input.GetKey(KeyCode.S))
        {
            rb.AddForce(new Vector3(0, 0, -5));
            // Zde přidáme hodnotu síly -5 na osu z (dozadu).
        }
    }
}

Díky využívání metody Update() se nám spouští náš kód automaticky, aniž bychom ho museli volat. Poté využíváme detekce kláves a následné akce v podobě působení síly (v našem případě) na objekt (hráče). Klávesy se dají nastavit libovolně a je možné nastavit tuto akci na jakoukoliv klávesu na klávesnici.

Spuštění hry

Spusťte hru pomocí ikony Play v okně Unity a zkuste si, co jste dnes vytvořili:

Spuštění hry v Unity 3D

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 příští lekci, 3D střílečka v Unity - Otáčení kamery pomocí myši, se naučíme otáčet kameru za myší.

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.


 

Stáhnout

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

 

Všechny články v sekci
Tvorba 3D her v Unity
Článek pro vás napsal Tomáš Brabec
Avatar
Jak se ti líbí článek?
2 hlasů
Hodně zdaru programátoři všeho druhu,doufám ,že nikdy nezažijete nudu.
Aktivity (7)

 

 

Komentáře

Avatar
Martin Líška:3. března 21:39

AHOJ. Urobil som všetko presne ako v návode a kapsula iba vystrelí hore a nič viac....ovládanie do strán mi nefunguje. Kde môže byt chyba? Ďakujem

 
Odpovědět
3. března 21:39
Avatar
Tomáš Brabec
Brigádník
Avatar
Odpovídá na Martin Líška
Tomáš Brabec:4. března 15:06

Pokud vystrelila nahoru tak mate nejspíše kapsli vloženou do terénu, takže dochází k velké kolizi. Pokud nefunguje ovladani ujistěte se, že máte vloženy skript na kapsli. Pokud nepomůže napište.

 
Odpovědět
4. března 15:06
Avatar
Martin Líška:10. března 19:26

Netusim co tomu je.....stale mi to nefunguje

 
Odpovědět
10. března 19:26
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Martin Líška:11. března 17:43

Tak a už mi to funguje... Chyba opravená.... Písal si ze v ďalšej lekcii sa budeš venovať otaceni kamery za myší.... Kde nájdem tú druhú lekciu? Lebo nikde ju neviem nájsť.

 
Odpovědět
11. března 17:43
Avatar
matyus
Člen
Avatar
Odpovídá na Martin Líška
matyus:12. března 22:39

Je dost možné, že ještě nebyla napsaná.

 
Odpovědět
12. března 22:39
Avatar
Odpovídá na matyus
Martin Líška:14. března 15:37

Aha? Tak dik...

 
Odpovědět
14. března 15:37
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.

Zobrazeno 6 zpráv z 6.