NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 5 - 3D střílečka v Unity - Animace zbraně při chůzi

V předchozím kvízu, Kvíz - Terén, hráč, otáčení kamery, Asset Store v Unity3D, jsme si ověřili nabyté zkušenosti z předchozích lekcí.

V dnešním Unity3D tutoriálu se naučíme pracovat s animacemi. Budeme spouštět a vypínat animaci zbraně.

Dnes implementujeme balíček, který jsme si stáhli v lekci Práce s Asset Store a model zbraně. Tento balíček obsahuje animace zbraně.

Animace

Pro zobrazení animací klikneme na objekt arms_assault_ri­fle01:

Tvorba 3D her v Unity

Objekt se nachází v záložce Inspector, podzáložce Animator.

Pro otevření Animátoru dvakrát klikneme na název assault_rifle01 v okénku Controller. Zde uvidíme všechny animace v podobě jednotlivých klipů pospojovaných v jednu síť. Každé vlákno naznačuje spojení jednotlivých animací.

Spuštění animací

Animace může být spuštěna jen za určitých podmínek, které se nastavují zde:

Tvorba 3D her v Unity

Nás nyní zajímá jen pravá část. Klikneme na tlačítko Parameters. Poté se nám zobrazí jednotlivé podmínky, za kterých se animace spustí. Podívejme se na parametr s názvem Walk. Je typu bool, takže může mít hodnotu true nebo false (pravda nebo nepravda). My chceme, aby parametr Walk měl hodnotu true při chůzi. Jdeme, když držíme jednu z kláves W A S D. Když nedržíme žádnou z těchto kláves, pak nejdeme a tudíž potřebujeme, aby parametr měl hodnotu false.To nastavíme v našem skriptu Move.

Úprava skriptu Move

Animace chůze se tedy bude zapínat a vypínat v našem skriptu pro pohyb hráče.

Proměnné

Tentokrát nám bude stačit přidat jednu proměnnou, a to objectwithAnim typu Animator:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{
    Animator objectwithAnim;
}

Metoda Start()

V této metodě inicializujeme proměnnou objectwithAnim metodou FindGameObjectWithTag() a získáním komponentu animator výsledného objektu:

void Start()
   {
       objectwithAnim = GameObject.FindGameObjectWithTag("Animobject").GetComponent<Animator>();
   }

V metodě vyhledáme herní objekt, který má tag nastavený na "Animobject". Tag našemu objektu nastavíme později v editoru. Metodu si nepleťme s její verzí vracející více objektů, FindGameObjectsWithTag(). V naší metodě Start() hledáme objekt podle tagu, aby nebyl kód závislý na konkrétním názvu a mohli jsme jej případně vyměnit za jiný.

Metoda Update()

Do těla stávajících podmínek, v metodě Update(), přidáme kód objectwithAnim.SetBool("Walk", true); pro změnu hodnoty parametru Walk na true při stisknutí některé z kláves W A S D. Na konec metody pak přidáme podmínku, která bude hlídat, že není stisknuta některá z výše uvedených kláves a nastaví parametr Walk na false:

void Update()
{
        if (Input.GetKey(KeyCode.D))
        {
            rb.AddRelativeForce(new Vector3(50, 0, 0));
            objectwithAnim.SetBool("Walk", true);
        }

        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);
        }
}

Upravený skript Move

Po úpravě vypadá náš skript Move následovně:

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);
        }
        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);
        }
    }
}

Nastavení v UnityEditor

Pojďme objektu nastavit tag. V UnityEditor klikneme na herní objekt, který má na sobě komponentu Animator. Tento objekt se jmenuje arms_assault_rifle01. Po kliknutí na objekt v okénku Hierarchy se nám objeví záložka Inspector. V něm je vidět komponenta Animator.

Změna tagu

Nyní změníme objektu tag, aby ho náš program zvládl najít. Klikneme na obdélník s názvem Tag, který se nachází hned pod názvem objektu. Po rozkliknutí klikneme na položku s názvem Add Tag:

Tvorba 3D her v Unity

Teď si přidáme tag. Klikneme na znaménko + ve čtverečku. Zobrazí se nám okénko s nápisem New Tag Name, do kterého napíšeme Animobject:

Tvorba 3D her v Unity

Jakmile napíšeme celý název našeho tagu, klikneme na tlačítko Save. Poté klikneme znovu na objekt v Hierarchy s názvem arms_assault_rifle_01. Zobrazí se nám opět Inspector. V něm nastavíme tag na Animobject:

Tvorba 3D her v Unity

Pokud bychom tag zapomněli nastavit, skript Move by nemohl najít objekt s tímto tagem.

Testování

Spusťme hru a užijme si nové animace :)

Tvorba 3D her v Unity

V příští lekci, 3D střílečka v Unity - Příprava animací, si přidáme přechody a podmínky k těmto animacím zbraně: běh, střelba, schování a prohlédnutí zbraně.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 38x (1.99 kB)
Aplikace je včetně zdrojových kódů v jazyce C# .NET

 

Předchozí článek
Kvíz - Terén, hráč, otáčení kamery, Asset Store v Unity3D
Všechny články v sekci
Tvorba 3D her v Unity
Přeskočit článek
(nedoporučujeme)
3D střílečka v Unity - Příprava animací
Článek pro vás napsal Tomáš Brabec
Avatar
Uživatelské hodnocení:
43 hlasů
Hodně zdaru programátoři všeho druhu,doufám ,že nikdy nezažijete nudu.
Aktivity