O čom je lab
V tomto laboratóriu sa zoznámite s prostredím Unity a naučíte sa pracovať s jeho základnými nástrojmi. Oboznámite sa s hierarchiou objektov, inšpektorom a projektovým oknom. Zistíte, ako v 3D priestore manipulovať s objektmi, nastavovať ich vlastnosti a pridávať nové prvky. Okrem toho si vytvoríte základný terén (Terrain) a pridáte prvé herné objekty. Na záver si ukážeme, ako do scény pridať hráča a jednoduchú funkcionalitu pomocou skriptovania v C#.
Ciele
- Oboznámite sa so základnými funkciami editora Unity, ako je hierarchia objektov, inšpektor a projektové okno.
- Naučíte sa pracovať s objektmi v 3D priestore – posun, rotácia, škálovanie a manipulácia s osami.
- Vytvoríte si vlastný terén (Terrain), pridáte textúry a modely.
- Pridáte hráča do scény a nastavíte jeho vlastnosti.
- Vyskúšate si prvé skriptovanie v C#
Postup
Krok 1: Oboznámenie sa s Unity Engine prostredím
Ikonky pre prácu s priestorom v Unity sa zvyčajne používajú na manipuláciu s objektami a zobrazujú rôzne nástroje a operácie v 3D priestore. Tu je popis niektorých základných ikoniek:
- Posunovanie (Translate): Táto ikonka zobrazuje šípky, ktoré znamenajú posunovanie objektu v priestore. Kliknutím a ťahaním tejto ikonky môžete objekt posúvať v smere šípiek.
- Otáčanie (Rotate): Ikonka s rotujúcim kruhom a šípkami umožňuje otáčať objekt okolo osí. Pomocou nej môžete meniť orientáciu objektu vo vašom 3D svete.
- Škálovanie (Scale): Ikonka so šípkami, ktoré smerujú od seba, umožňuje meniť veľkosť objektu v priestore. Pomocou nej môžete meniť veľkosť objektu v smere šípiek.
- Výber (Select): Táto ikonka zobrazuje kurzor alebo šípku na výber objektu. Kliknutím na ňu môžete označiť objekty vo vašej scéne.
- Priblížiť (Zoom In) a Oddialiť (Zoom Out): Ikonky so zväčšovacím a zmenšovacím znakom umožňujú približovanie a oddialovanie pohľadu na scénu.
- Osy (Axes): Tieto ikonky zobrazujú osi (X, Y, Z) a umožňujú Vám prepínať sa medzi nimi. Používajú sa na presné zarovnávanie objektov podľa určitej osi.
- Priradenie do VR priestoru: Táto ikonka zobrazuje brýle alebo headset, čo značí, že Vaša scéna alebo hra je pripravená na virtuálnu realitu (VR).
Tieto ikonky Vám pomáhajú manipulovať s objektami v 3D priestore a uskutočňovať rôzne úpravy vo Vašich projektoch v Unity.
Klikaním na rôzne nástroje sa nám vyskytujú rôzne možnosti úpravy objektov. Skratkou je používať namiesto klikania na ikonky tlačidla Q W E R T Y. Ak Vám to nejde ľahko, nebojte sa, dostanete sa do toho.
Čo je hierarchia?
V Unity je hierarchia štruktúra, ktorá organizuje herné objekty podľa vzťahov medzi nimi. Hierarchia ukazuje, ktoré objekty sú nadradené a ktoré sú podriadené. Tento vzťah zjednodušuje riadenie, spravovanie a editovanie objektov vo vašej hre. Pomocou hierarchie môžete jednoducho nastavovať viditeľnosť a aktívnosť objektov, čo je dôležité pri vytváraní hier v Unity.
Čo je to inšpektor?
Inšpektor v Unity je panel, ktorý poskytuje detailné informácie a nastavenia pre vybraný herný objekt alebo komponent. Je to miesto, kde môžete prispôsobiť vlastnosti objektov, pridávať komponenty, meniť ich parametre a vizuálne konfigurovať rôzne aspekty hry.
Čo je project window?
Okno "Project" v Unity je miesto, kde vidíte a pracujete so všetkými súbormi vo vašom projekte. Môžete vidieť zoznam súborov, priečinkov, vyhľadávať, organizovať ich do priečinkov, a vykonávať rôzne operácie, ako otvárať, premenovávať, alebo mazať. Je to dôležitý nástroj pre správu súborov vo vašich projektoch.
Obsah celého projektu ako Scény, prefaby, assety a tak ďalej sa zobrazuje dole v okne Project.
Terén
Po otvorení unity projektu si otvoríme priečinok Scenes.
Čo je to scéna? V Unity je scéna základným stavebným blokom, kde sa odohráva Vaša hra alebo aplikácia. Scéna obsahuje všetky herné objekty, kamery, svetlá a iné prvky, ktoré tvoria Vašu hru. To zahŕňa postavy, prostredie, zvuky a ďalšie komponenty. Scény môžu slúžiť na rôzne účely, od rôznych levelov hry po rôzne časti rozhrania. V Unity môžete vytvoriť, editovať a prepínať medzi rôznymi scénami, čo Vám umožňuje riadiť, ako Vaša hra prebieha a ako sú objekty organizované. Scény sú teda významným nástrojom pre tvorbu a organizáciu hier a aplikácií v Unity.
V priečinku scenes si pravým klikom otvoríme ponuku, klikneme na možnosť Create a v menu si vyberieme možnosť Scene.
Toto nám vytvorí novu scénu, v ktorej budeme v tomto návode pracovať. Ostatne scény v priečinku si nevšímajte, budeme s nimi pracovať neskôr.
V hierarchii si opäť klikneme pravým tlačidlom a z možnosti si vyberieme 3D Object a v jeho ponuke možnosť Terrain.
Vznikne nám takáto plocha. Pre nás bude predstavovať hernú plochu pre našu hru. V jej nastaveniach (inšpektore) si zvolíme Position (0, -100, 0). V hodnote y sme zvolili -100 preto, pretože budeme vytvárať kopce ale aj diery. Scale si zvolíme 1,1,1, keďže momentálne nepotrebujeme vytvárať špeciálne veľké priestory.
Ako si môžete všimnúť, v inšpektore máme možnosť rôznych štetcov, ich veľkosti a podobne. Ak to v aktuálnom rozhraní nie je dostupné, kliknite na možnosť Windows a v nej vyberte Package manager. Môže sa stať, že Vám vyskočí ako samostatne okno, v takom prípade si ho pretiahnite ku scéne, keďže ho budeme potrebovať a bude vhodne ho mat na očiach.
Čo je to „package“? V Unity je "package" balíček, ktorý obsahuje rôzne prvky, ako sú skripty, modely, textúry a zvuky. Slúži na importovanie a zdieľanie obsahu medzi projektmi a vývojármi. Balíky môžu rozširovať funkcionalitu Unity a uľahčiť spoluprácu a vývoj projektov.
Následne si zvolíme v Packages: Unity Registry, aby sme videli všetky package.
Následne do možnosti vyhľadávania zadáme "Terrain Tools" čím sa v rámci okna Package Manager daný balíček zobrazí. Stiahnite si ho do svojho projektu.
Ak tam tento package nevidíte, prejdite hore v menu do Edit, vyberte možnosť Project Settings a pretiahnite ho ku scéne.
V možnosti Project Settings zvoľte Package Manager a v jeho ponuke zaškrtnite možnosť Enable Preview Package.
Teraz by ste mali mať úspešne pridané nove štetce a tvary v inšpektore pre Terrain.
Úloha 1.1
Vašou prvou úlohou bude tento terrain nadizajnovať podľa seba, ako sa Vám to pre vašu hru hodí. Myslite pri tom na to, že okraje plochy by mali byť vždy vyššie, aby sa pri pohybe hráča po hernej ploche zobrazovalo v pozadí skôr Vaše pozadie ako defaultné Unity hnedé pozadie.
V tomto menu si môžete vybrať konkrétne úkony, ktoré chcete na Terraine vykonávať. Napríklad zrovnávať alebo vytvárať rôzne efekty.
Ako môžete vidieť, veľkosť a intenzitu ako aj mnoho ďalšieho si viete nastaviť v Stroke.
Teraz by nám chýbalo iba posledné, a to farby. Čo budeme potrebovať je ísť na stránku s unity assetmi, napríklad takto:
Na stránke si vyhľadáme assety, ktoré potrebujeme a stiahneme si ich. Po stiahnutí assetov na stránke si ich zobrazíte v možnosti Package Manager pod My assets. Klikneme na možnosť download a po stiahnutí si ich importujeme do projektu, tiež pomocou tlačidla v pravo hore.
Assety si môžete stiahnúť aj z týchto linkov:
- https://assetstore.unity.com/packages/2d/textures-materials/nature/terrain-textures-pack-free-139542
- https://assetstore.unity.com/packages/3d/environments/landscapes/terrain-sample-asset-pack-145808
- https://assetstore.unity.com/packages/3d/environments/landscapes/terrain-sample-asset-pack-145808
- https://assetstore.unity.com/packages/3d/vehicles/space/star-sparrow-modular-spaceship-73167
Teraz sa môžeme pustiť do farbenia nášho Terrainu. V inšpektore si zvolíme možnosť paint texture, prejdeme do oddelenia Layers a pridáme ho pomocou možnosti Add Layer.
Vďaka assetom, ktoré sme si do projektu stiahli by sa nám mali ukázať rôzne textúry. Každú z nich si vieme pridať samostatne a následne si našu hernú plochu vykreslíme podľa vlastných potrieb.
Nášmu terénu už chýbajú iba detaily, napríklad také stromy. Môžete si ich vyhľadať pomocou asset storu. V okne inšpektora si vyberiete možnosť Paint Trees.
Následne si zvolíte Edit Trees a v nej možnosť Add Tree.
Po rozkliknuti sa zobrazí ponuka Add Tree, po kliknutí na krúžok sa nám zobrazia možnosti, ktoré sú v projekte už pridané.
Po odkliknutí sa nám zobrazia možnosti stromov, ktoré môžete kresliť na plochu. Po kliknutí na jeden z dostupných stromov si všimnite možnosti veľkosti a hustoty štetca. Je vhodné si vopred premyslieť ako stromy na hernej ploche rozmiestnite. Šikovná možnosť je aj rozmiestnenie stromov pomocou Mass place trees.
Úloha 1.2
Vytvorte vhodný svet pre Vašu hru s použitím terénových úprav a stromov.
BONUS: Ozvláštnite svoju hru novými assetmi použitím AssetStore alebo vytvorením vlastných, je to na Vás.
Hráč
Naša hra by však nebola zaujímavá, ak by sme sa mali pozerať iba na stromčeky a kopce. Presne preto teraz prejdeme k zaujímavej časti - dodáme našej hre hráča.
Vytvoríme si prázdny objekt a pomenujeme ho Player Rig. V ňom si následne vytvoríme objekt Cube a pomenujeme ho Player.
Tento objekt bude predstavovať nášho hráča, no zároveň aj kameru. To preto, aby sa pri pohybe hráča po ploche hýbala s ním aj kamera. V prípade, že chceme pre našu hru statickú kameru tento krok nie je potrebný.
Ako child objektu Player presunieme kameru (Main Camera) na hráča.
Teraz si môžeme opäť vyhľadať vhodné assety v Asset Store. Medzi nimi si vyberiete vhodný asset, ktorý bude reprezentovať hráča. Pretiahnutím si ho presuňte medzi Player Rig, následne si ho umiestnite na miesto bielej kocky, ktorú môžete zmazať.
Kliknutím na Main Camera je pomocou jej uhlov možné nastaviť najvhodnejšiu pozíciu na sledovanie hráča po ploche.
Výsledok môže vyzerať takto:
Upozornenie
Ak chcete pohybovať s hráčom, vždy označte Player Rig, aby sa s nim hýbala aj kamera. Predídete nepríjemnostiam ☺.
Úloha 1.3
Pridajte do svojej hry hráča, a nastavte mu podobu.
BONUS: Nájdite si vlastný prefab, môžete si zvoliť v AssetStore alebo vytvoriť vlastný, je to na Vás.
Rigidbody
Čo je to Rigidbody? Rigidbody je fyzikálny komponent v Unity, ktorý umožňuje, aby objekt reagoval na fyziku (napr. gravitáciu, kolízie a sily). Ak chceš, aby sa objekt pohyboval realisticky a interagoval s prostredím, potrebuje mať pridaný Rigidbody.
Aby sa dron mohol hýbať a správne interagovať s fyzikálnym prostredím v Unity, musíme mu pridať komponent Rigidbody:
V hierarchii vyber objekt drone a v inšpektorovi klikni na Add Component. Napíš alebo vyhľadaj Rigidbody. V inšpektorovi nastav Use Gravity na vypnuté, keďže nechceme aby nám dron spadol (v prípade iných hier kde hráč chodí po svete nechajte gravitáciu zapnutú). Pre Is Kinematic necháme túto možnosť vypnutú, aby mohol reagovať na fyziku a kolízie. Collision Detection nastavíme na Continuous pre lepšiu detekciu kolízií pri rýchlom pohybe.
V našom skripte DroneController budeme používať Rigidbody na pohyb drona cez fyzikálny systém Unity. Namiesto priamej zmeny transform.position, použijeme Rigidbody.velocity, čo zabezpečí plynulejší pohyb a správnu detekciu kolízií.
Skripty
Naša hra by však nebola hrou, ak by sa hráč mohol iba prizerať. Práve preto si teraz pridáme do našej hry náš prvý script.
Čo je to script? "Skripty" v Unity sú súbory obsahujúce kód napísaný v jazyku C#. Tieto kódy definujú správanie a funkcie, ktoré sa používajú na ovládanie a riadenie hier a aplikácií v Unity. Skripty môžu obsahovať logiku pre pohyb postáv, interakciu s objektami, animácie, riadenie zvuku a mnoho ďalších vecí. Sú dôležitou súčasťou tvorby hier a aplikácií v Unity, umožňujú vývojárom vytvárať vlastné funkcionality a prispôsobovať správanie svojich projektov.
Pravým kliknutím v Project okne si vyberieme z možností C# Script, premenujeme si ho hneď pri vytvorení na MovementScript. Otvoríme si ho vo vývojovom prostredí VisualStudioCode, kedy naň jednoducho stačí kliknúť.
Start Metóda:
- Metóda Start sa volá práve raz, keď je herný objekt vytvorený alebo scéna načítaná. Táto metóda je často využívaná na inicializáciu premenných, prípravu herných komponentov alebo nastavenie východiskových hodnôt.
- Napríklad, ak chceš inicializovať pohybovú rýchlosť hráča na začiatku hry, môžeš to spraviť v metóde Start.
Update Metóda:
- Metóda Update sa volá v každom snímku hry (obvykle 60 krát za sekundu). Slúži na spracovanie herných udalostí, interakcií a aktualizáciu stavu hry.
- Typické použitie tejto metódy je na pohyb objektov, kontrolu hráčovho vstupu, kolízií, atď.
public class DroneController : MonoBehaviour
{
[SerializeField] private float moveSpeed = 10f; // Rýchlosť pohybu
[SerializeField] private float rotationSpeed = 100f; // Rýchlosť otáčania
[SerializeField] private float xRange = 10f;
[SerializeField] private float yRange = 7f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// Pohyb hore/dole + dopredu/dozadu
float moveForward = Input.GetAxis("Vertical"); // Hore/dole
float moveSideways = Input.GetAxis("Horizontal"); // Do strán (A/D)
// Otáčanie
float rotation = Input.GetAxis("Horizontal") * rotationSpeed * Time.deltaTime;
// Vytvorenie pohybového vektora
Vector3 moveDirection = transform.forward * moveForward * moveSpeed; // Dopredu/dozadu
Vector3 strafeDirection = transform.right * moveSideways * moveSpeed; // Do strán (A/D)
// Nastavenie pohybu
rb.velocity = moveDirection + strafeDirection;
// Otáčanie okolo osi Y
rb.angularVelocity = new Vector3(0, rotation, 0);
}
}
Tento script si na hráča pridáme jednoducho. Klikneme na PlayerRig a vyberieme si objekt, ktorý reprezentuje nášho hráča, v tomto prípade sa volá drone. V inšpektore si klikneme na Add Component, a vo vyhľadávaní si nájdeme náš skript. Ten potom vyzerá v inšpektore takto:
Teraz si môžete skúsiť tieto hodnoty meniť a otestovať, čo bude pre vašu loď najvhodnejšie.
Tip: Ak vám tieto pohyby nefungujú alebo nereagujú, pozrite si Váš Input Manager a nastavte si tam správne klávesy. Rovnako to platí aj v prípade, že chcete na ovládanie používať iné klávesy.