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é 42x (1.99 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#
