1. diel - 3D strieľačka v Unity - Terén a pohyb hráča
Vitajte v prvej lekcii on-line kurzu, v ktorom si naprogramujeme svoju prvú 3D strieľačku v Unity. Pôjde o hru z pohľadu prvej osoby, tzv. FPS (First Person Shooter), čo je zrejme najpopulárnejší žáner 3D hier.
Vytvorenie projektu
Po otvorení Unity sa nám zobrazí okno s názvom Unity Hub. Klikneme na tlačidlo New. Potom sa nám otvorí nové okno s názvom Create a new project with Unity:
Názov si zvoľte aký je vám najmilšie (ak budete mať iný názov ako tu
ja, nič sa tým pre vás nemení). Ja som pomenoval projekt
RIGIDBODY_COMPONENT
. Lokácii projektu nechajte v predvolenom
nastavení, ak ho teda nechcete ukladať do nejakej špeciálnej zložky. Potom
už len klikneme na CREATE.
Akonáhle sa nám otvoril náš projekt, vyzerá nasledovne:
Projekt už obsahuje direct light (priame svetlo), ktoré je tvorené bodom, ktorý má určitý dosah. V tomto prípade si ho môžeme predstaviť ako slnko. Zároveň projekt obsahuje předvytvořenou kameru. Kamera môže byť neskôr zmazaná alebo vytvorená ďalšie. V prípade viacerých kamier sa musí nastaviť ktorá sa bude zobrazovať v danú chvíľu ako hráčova pohľad. To môžeme nastaviť v Inspector (vlastnostiach) alebo je možné ju prepínať z vytvoreného skriptu. Teraz však zachováme súčasnú scénu ako je.
Terén
Vytvoríme si náš prvý objekt - "Terén". Vytvoríme ho tým spôsobom, že prejdeme kurzorom do okna Hierarchy (sivé pole, ktoré obsahuje SampleScene). Klikneme tu pravým tlačidlom myši a objaví sa nám možnosti čo do scény pridať. Zvolíme 3D Object a klikneme ľavým tlačidlom na Terrain:
výsledok:
Hráč
Po čom chodiť by sme mali. Teraz vytvoríme rovnakým spôsobom akýkoľvek 3D objekt, ktorý bude naším hráčom. Klikneme teda pravým tlačidlom myši do okna Hierarchy a zvolíme 3D Object. Ja som zvolil Capsule (objekt tvaru kapsule). Nastavíme pozíciu Y hráčov o trochu väčšie, než ju má terén, pretože ak by bola rovnaká ako náš terén, tak by sa nám objekty v hre objavili v sebe. Os Y sa nastavuje pomocou desatinných čísel. Osi Y nastavíme hodnotu o približne desatiny väčšia než má hodnota, ktorú zistíme v záložke Inspector po kliknutí na Terrain:
Komponenta RIGIDBODY
Teraz pridáme hráči komponent RIGIDBODY, ktorá sa stará o fyziku objektu. Vďaka tomu sa náš hráč bude ďalej môcť po teréne pohybovať, teda až ho to naučíme.
Klikneme na objekt, ktorý má byť náš hráč ľavým tlačítkom, v záložke Hierarchy (ľavá časť okna Unity), potom sa nám objaví záložka v pravej časti Unity s názvom Inspector. Tu klikneme na Add Component:
V zozname vyhľadáme komponent RIGIDBODY.
Pozor, neklikajte na RIGIDBODY2D!
Komponenty vyberieme ľavým tlačidlom myši:
Ďalej rozkliknite záložku Constraints v komponente RIGIDBODY a nastavíme FREEZE ROTATION X, Y, Z (zaškrtneme ho u všetkých osí z dôvodu, aby nám potom hráč nepadal, keď na neho budeme pôsobiť silou).
Teraz vyberieme hlavné kameru:
Úprava kamery
Objektu Main Camera nastavíme rovnakú pozíciu ako nášmu hráči:
Kameru Main Camera pretiahneme do objektu hráča tak, že ju pretiahneme v okne Hierarchy na objekt hráča:
Prvé krôčiky - Skript pre pohyb po teréne
Teraz vytvoríme skript na pohyb hráča po teréne. Opäť klikneme na
Add Component a do vyhľadávacieho poľa napíšeme názov
skriptu (ja ho pomenujem Move
). Klikneme na New
script a Create and Add. Akonáhle sa nám objaví
skript pri objekte v Inspector, dvakrát naň klikneme ľavým
tlačidlom a tým ho otvoríme vo Visual Studiu:
Následne vložíme kód nižšie. Jeho jednotlivé časti sú popísané pomocou komentárov:
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). } } }
Vďaka využívaniu metódy Update()
sa nám spúšťa náš
kód automaticky, bez toho aby sme ho museli volať. Potom využívame detekcie
kláves a následné akcie v podobe pôsobenia sily (v našom prípade) na
objekt (hráča). Klávesy sa dajú nastaviť ľubovoľne a je možné nastaviť
túto akciu na akúkoľvek kláves na klávesnici.
Spustenie hry
Spustite hru pomocou ikony Play v okne Unity a skúste si, čo ste dnes vytvorili:
To by bolo pre dnešné lekciu všetko. Dnes sme sa naučili vytvárať projekt, pridávať 3D objekty ak nim komponenty. Vytvorili sme prvý skript, ktorý nám zabezpečuje pohyb hráčov po hernej ploche.
V budúcej lekcii, 3D strieľačka v Unity - Otáčanie kamery pomocou myši , sa naučíme otáčať kameru za myšou.
V ďalšej lekcii, 3D strieľačka v Unity - Otáčanie kamery pomocou myši , sa naučíme ovládať pohľad herné postavy pomocou myši, zároveň definovať herný objekt novým spôsobom a pridávať silu v aktuálnom smere osí.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 239x (2.56 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#