4. diel - 3D strieľačka v Unity - Animácie zbrane pri chôdzi
V minulej lekcii, 3D strieľačka v Unity - Práca s Asset Store a model zbrane , sme sa naučil importovať balíčky Unity Asset Store a pracovať s nimi. Do hry sme pridali model zbrane.
V dnešnej lekcii sprevádzkujeme animáciu chôdze z balíčka modelu rúk so zbraňou, ktorý sme stiahli minule. Balíček už obsahuje tieto animácie pripravené.
Animácie
Pre zobrazenie animácií klikneme na objekt arms_assault_rifle 01 a uvidíme ich v záložke Inspector, podzáložka Animator:
Pre otvorenie animátor dvakrát klikneme na názov assault_rifle 01 v okienku Controller. Tu uvidíme všetky animácie v podobe jednotlivých klipov pospájaných v jednu sieť. Každé vlákno naznačuje spojenia jednotlivých animácií. Animácia môže byť spustená len za určitých podmienok a alebo napríklad hneď po spustení, to záleží na tom, ako je to nastavené:
Nás zaujíma teraz len pravá časť. Klikneme na tlačidlo
Parameters. Potom sa nám zobrazia jednotlivé podmienky, za
ktorých sa animácia spustí. Pozrime sa na parameter s názvom
Walk
. Je typu bool
, takže môže mať hodnotu
true
alebo false
(pravda alebo nepravda). My chceme,
aby parameter Walk mal hodnotu true
, vtedy keď
ideme (to sa deje, keď držíme jednu z klávesov W A
S D), a hodnotu false
, keď nedržíme
žiadny kláves. To nastavíme v našom skriptu Move
.
Úprava skriptu Move
Animáciu chôdze teda budeme zapínať a vypínať v našom skriptu pre pohyb hráčov. Skript upravíme do nasledujúcej podoby:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { Rigidbody rb; Animator objectwithAnim; void Start() { rb = transform.GetComponent<Rigidbody>(); objectwithAnim = GameObject.FindGameObjectWithTag("Animobject").GetComponent<Animator>(); } void Update() { if (Input.GetKey(KeyCode.D)) { rb.AddRelativeForce(new Vector3(50, 0, 0)); objectwithAnim.SetBool("Walk", true); // Spuštění animace } if (Input.GetKey(KeyCode.A)) { rb.AddRelativeForce(new Vector3(-50, 0, 0)); objectwithAnim.SetBool("Walk", true); } if (Input.GetKey(KeyCode.W)) { rb.AddRelativeForce(new Vector3(0, 0, 50)); objectwithAnim.SetBool("Walk", true); } if (Input.GetKey(KeyCode.S)) { rb.AddRelativeForce(new Vector3(0, 0, -50)); objectwithAnim.SetBool("Walk", true); } if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.D)) { objectwithAnim.SetBool("Walk", false); } } }
V našom skriptu sme si vytvorili premennú objectwithAnim
.
Túto premennú inicializujeme v metóde Start()
metódou
FindGameObjectWithTag()
a získaním komponent Animator
výsledného objektu. Ako asi tušíte podľa názvu, metóda vyhľadá herný
objekt, ktorý má tag nastavený na "Animobject"
. Tag nášmu
objektu nastavíme neskôr v editore. Metódu si nemýľme s jej verziou
vracajúci viac objektov, FindGameObjectsWithTag()
. Tu hľadáme
objekt podľa tagu, aby nebol kód závislý na konkrétnom názvu a mohli sme
ho prípadne vymeniť za iný.
Poďme objektu tag nastaviť. V UnityEditor klikneme na herný objekt, ktorý na sebe má komponent Animator. Tento objekt sa volá arms_assault_rifle01. Po kliknutí na objekt v okienku Hierarchy sa nám objaví záložka Inspector. V ňom je vidieť komponenta Animator:
Teraz zmeníme objektu tag, aby ho náš program zvládol nájsť. Klikneme na obdĺžnik s názvom Tag, ktorý sa nachádza hneď pod názvom objektu. Po rozkliknutí klikneme na položku s názvom Add Tag. Teraz si pridáme tag, ktorý priradíme za chvíľu tomuto objektu:
Teraz klikneme na znamienko plus vo štvorčeku a zobrazí sa nám okienko s
nápisom New Tag Name. Vedľa neho máme voľné pole, do
ktorého napíšeme Animobject
(do písmena, presne takto, pretože
náš skript hľadá objekt s týmto tagom). Akonáhle
napíšeme celý názov nášho tagu, klikneme na tlačidlo
Save. Potom klikneme znovu na objekt v
Hierarchy s názvom arms_assault_rifle 01 a
zobrazí sa nám opäť Inspector. V ňom nastavíme
tag na Animobject
:
V kóde skriptu potom pri stlačení kláves použijeme objekt, ktorý sme si
definovali, a získame z neho komponentu Animator
. Tým získame
možnosť upravovať animácie, ktoré sú k tomuto objektu prichytené. V tomto
prípade sú to všetky animácie. Jednou z metód komponenty
Animator
je zmeniť hodnotu parametra. My sme zmenili hodnotu
premennej typu bool
s názvom Walk
na hodnotu
true
, čím sa spustí animácia chôdze. Animáciu vypneme v
poslednej podmienke, ktorá platí, ak nie je ani jedna klávesa stlačená.
Spustite hru a užite si nové modely a animácie:)
V nasledujúcom kvíze, Kvíz - Terén, hráč, otáčanie kamery, Asset Store v Unity3D, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.
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é 36x (1.99 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#