BLACK FRIDAY! Slevy až 80 % jsou všude. Tak je nepropásni a přejdi do rostoucího IT oboru!
BF Sales

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

V minulé lekci, 3D střílečka v Unity - Práce s Asset Store a model zbraně, jsme se naučil importovat balíčky Unity Asset Store a pracovat s nimi. Do hry jsme přidali model zbraně.

V dnešní lekci zprovozníme animaci chůze z balíčku modelu rukou se zbraní, který jsme stáhli minule. Balíček již obsahuje tyto animace připravené.

Animace

Pro zobrazení animací klikneme na objekt arms_assault_ri­fle01 a uvidíme je v záložce Inspector, podzáložka 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í. Animace může být spuštěna jen za určitých podmínek a nebo třeba hned po spuštění, to záleží na tom, jak je to nastaveno:

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Nás zajímá nyní 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, tehdy když jdeme (to se děje, když držíme jednu z kláves W A S D), a hodnotu false, když nedržíme žádnou klávesu. To nastavíme v našem skriptu Move.

Úprava skriptu Move

Animaci chůze tedy budeme zapínat a vypínat v našem skriptu pro pohyb hráče. Skript upravíme do následující 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šem skriptu jsme si vytvořili proměnnou objectwithAnim. Tuto proměnnou inicializujeme v metodě Start() metodou FindGameObjectWithTag() a získáním komponentu animator výsledného objektu. Jak asi tušíte podle názvu, metoda vyhledá 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(). Zde 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ý.

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

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. Teď si přidáme tag, který přiřadíme za chvíli tomuto objektu:

Nyní klikneme na znaménko plus ve čtverečku a zobrazí se nám okénko s nápisem New Tag Name. Vedle něj máme volné pole, do kterého napíšeme Animobject (do písmene, přesně takhle, protože náš skript hledá objekt s tímto tagem). 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_ri­fle01 a zobrazí se nám opět Inspector. V něm nastavíme tag na Animobject:

V kódu skriptu pak při stisku kláves použijeme objekt, který jsme si definovali, a získáme z něj komponentu Animator. Tím získáme možnost upravovat animace, které jsou k tomuto objektu přichycené. V tomto případě jsou to všechny animace. Jednou z metod komponenty Animator je změnit hodnotu parametru. My jsme změnili hodnotu proměnné typu bool s názvem Walk na hodnotu true, čímž se spustí animace chůze. Animaci vypneme v poslední podmínce, která platí, pokud není ani jedna klávesa stisknutá.

Spusťte hru a užijte si nové modely a animace :)

V příští lekci, 3D střílečka v Unity - Příprava animací, přidáme přechody a podmínky k dalším animacím zbraně: Běh, Střelba, Schování zbraně, Prohlédnutí zbraně.


 

Stáhnout

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

 

Předchozí článek
3D střílečka v Unity - Práce s Asset Store a model zbraně
Všechny články v sekci
Tvorba 3D her v Unity
Článek pro vás napsal Tomáš Brabec
Avatar
Jak se ti líbí článek?
1 hlasů
Hodně zdaru programátoři všeho druhu,doufám ,že nikdy nezažijete nudu.
Aktivity (5)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!