Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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:

Tvorba 3D hier v Unity

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é:

Tvorba 3D hier v Unity

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_ri­fle01. Po kliknutí na objekt v okienku Hierarchy sa nám objaví záložka Inspector. V ňom je vidieť komponenta Animator:

Tvorba 3D hier v Unity

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:

Tvorba 3D hier v Unity

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:

Tvorba 3D hier v Unity

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:)

Tvorba 3D hier v Unity

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

 

Predchádzajúci článok
3D strieľačka v Unity - Práca s Asset Store a model zbrane
Všetky články v sekcii
Tvorba 3D hier v Unity
Preskočiť článok
(neodporúčame)
Kvíz - Terén, hráč, otáčanie kamery, Asset Store v Unity3D
Článok pre vás napísal Tomáš Brabec
Avatar
Užívateľské hodnotenie:
2 hlasov
Hodně zdaru programátoři všeho druhu,doufám ,že nikdy nezažijete nudu.
Aktivity