BLACK FRIDAY! Slevy až 80 % jsou všude. Tak je nepropásni a přejdi do rostoucího IT oboru!
The real BF 2020

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 46x (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
Zobrazit starší komentáře (4)

Avatar
matyus
Člen
Avatar
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
Avatar
Michal Černý:10. října 20:24

Kapsule se mi nehejbe :/ Nějak jsem to asi nepochopil. Vytvořil jsem Move dal tam kód a kapsule nic :(

 
Odpovědět
10. října 20:24
Avatar
Tomáš Brabec
Brigádník
Avatar
Odpovídá na Michal Černý
Tomáš Brabec:11. října 9:08

A mate u kapsle komponentu RIGIDBODY? A mate skript umístěny na kapslí?

 
Odpovědět
11. října 9:08
Avatar
Tomáš Brabec
Brigádník
Avatar
Odpovídá na Michal Černý
Tomáš Brabec:11. října 9:10

Zkuste ještě zmenšit hodnoty u RIGIDBODY, je možné ze mate nastavenou velkou hmotnost kapsle a díky tomu to vypadá jako by se kapsle nehybala.

 
Odpovědět
11. října 9:10
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Tomáš Brabec
Brigádník
Avatar
Odpovídá na Michal Černý
Tomáš Brabec:11. října 9:12

Nebo místo měnění hodnot v RIGIDBODY zvyšte hodnoty ve skriptu z 5 třeba na 100 a pak upravujte.

 
Odpovědět
11. října 9:12
Avatar
Odpovídá na Tomáš Brabec
Michal Černý:11. října 10:50

Děkuji bylo to tím scriptem neměl jsem ho u capsule. Totiž se mě jaksi vždy hodí automaticky mimo :( jinak jsem to rozchodil

 
Odpovědět
11. října 10:50
Avatar
Tomáš Brabec
Brigádník
Avatar
Odpovídá na Michal Černý
Tomáš Brabec:11. října 11:24

Dobře to jsem rad. :)

 
Odpovědět
11. října 11:24
Avatar
kuba
Člen
Avatar
kuba:30. října 10:27

Udělal jsem vše podle návodu a nefunguje.

 
Odpovědět
30. října 10:27
Avatar
Tomáš Brabec
Brigádník
Avatar
Odpovídá na kuba
Tomáš Brabec:30. října 11:33

Mate skript umístěny na kapslí?
Případně zkuste zvýšit číslo, které je ve skriptu na řádce Rn.Addforce(nějaké číslo,0,0) tak toto číslo ve skriptu zvyšte.

 
Odpovědět
30. října 11:33
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 10 zpráv z 14. Zobrazit vše