Szukaj…


Podstawowa animacja do biegania

Ten kod pokazuje prosty przykład animacji w Unity.

W tym przykładzie powinieneś mieć 2 klipy animacyjne; Biegnij i bezczynnie. Te animacje powinny być ruchami Stand-In-Place. Po wybraniu klipów animacyjnych utwórz kontroler Animator. Dodaj ten kontroler do odtwarzacza lub obiektu gry, który chcesz animować.

Otwórz okno Animatora z opcji Windows. Przeciągnij 2 klipy animacyjne do okna Animator, aby utworzyć 2 stany. Po utworzeniu użyj lewej zakładki parametrów, aby dodać 2 parametry, oba jako bool. Nazwij jeden jako „PerformRun”, a drugi jako „PerformIdle”. Ustaw „PerformIdle” na true.

Wykonaj przejścia ze stanu Bezczynności do Uruchom i Uruchom do Bezczynności (patrz obrazek). Kliknij Idle-> Uruchom przejście i w oknie Inspektora usuń zaznaczenie HasExit. Zrób to samo dla drugiego przejścia. Dla Idle-> Run przejście dodaj warunek: PerformIdle. Dla Run-> Idle dodaj warunek: PerformRun. Dodaj podany poniżej skrypt C # do obiektu gry. Powinien działać z animacją za pomocą przycisku W górę i obracać za pomocą przycisków Lewy i Prawy.

using UnityEngine;
using System.Collections;

public class RootMotion : MonoBehaviour {

//Public Variables
[Header("Transform Variables")]
public float RunSpeed = 0.1f;
public float TurnSpeed = 6.0f;


Animator animator;

void Start()
{
    /**
    * Initialize the animator that is attached on the current game object i.e. on which you will attach this script.
    */
    animator = GetComponent<Animator>();
}

void Update()
{
    /**
    * The Update() function will get the bool parameters from the animator state machine and set the values provided by the user.
    * Here, I have only added animation for Run and Idle. When the Up key is pressed, Run animation is played. When we let go, Idle is played.
    */
    
    if (Input.GetKey (KeyCode.UpArrow)) {
            animator.SetBool ("PerformRun", true);
            animator.SetBool ("PerformIdle", false);
        } else {
            animator.SetBool ("PerformRun", false);
            animator.SetBool ("PerformIdle", true);
        }
}

void OnAnimatorMove()
    {
        /**
         * OnAnimatorMove() function will shadow the "Apply Root Motion" on the animator. Your game objects psoition will now be determined 
         * using this fucntion.
         */
        if (Input.GetKey (KeyCode.UpArrow)){
            transform.Translate (Vector3.forward * RunSpeed);
            if (Input.GetKey (KeyCode.RightArrow)) {
                transform.Rotate (Vector3.up * Time.deltaTime * TurnSpeed);
            }
            else if (Input.GetKey (KeyCode.LeftArrow)) {
                transform.Rotate (-Vector3.up * Time.deltaTime * TurnSpeed);
            }
        }

    }


   
}

wprowadź opis zdjęcia tutaj

Tworzenie i używanie klipów animacyjnych

Ten przykład pokaże, jak tworzyć i wykorzystywać klipy animacyjne dla obiektów gry lub graczy.

Uwaga, modele użyte w tym przykładzie są pobierane z Unity Asset Store. Odtwarzacz został pobrany z następującego linku: https://www.assetstore.unity3d.com/en/#!/content/21874 .

Aby utworzyć animacje, najpierw otwórz okno animacji. Możesz go otworzyć, klikając Okno i wybierz Animację lub naciśnij Ctrl + 6. Wybierz obiekt gry, do którego chcesz zastosować klip animacji, z okna Hierarchia, a następnie kliknij przycisk Utwórz w oknie animacji.

wprowadź opis zdjęcia tutaj

Nazwij swoją animację (np. IdlePlayer, SprintPlayer, DyingPlayer itp.) I zapisz ją. Teraz w oknie animacji kliknij przycisk Dodaj właściwość. Umożliwi to zmianę właściwości obiektu gry lub gracza w odniesieniu do czasu. Może to obejmować transformacje, takie jak obrót, położenie i skala oraz dowolne inne właściwości dołączone do obiektu gry, np. Zderzacz, renderer siatki itp.

wprowadź opis zdjęcia tutaj

Aby utworzyć działającą animację dla obiektu gry, potrzebujesz humanoidalnego modelu 3D. Możesz pobrać model z powyższego linku. Wykonaj powyższe kroki, aby utworzyć nową animację. Dodaj właściwość Transform i wybierz Obrót dla jednej z odnóg postaci.

wprowadź opis zdjęcia tutaj

W tym momencie twój przycisk Play i wartości obrotu we właściwości obiektu gry zmieniłyby kolor na czerwony. Kliknij strzałkę rozwijaną, aby zobaczyć wartości obrotu X, Y i Z. Domyślny czas animacji jest ustawiony na 1 sekundę. Animacje używają klatek kluczowych do interpolacji między wartościami. Aby animować, dodaj klucze w różnych momentach i zmień wartości obrotu w oknie Inspektora. Na przykład wartość obrotu w czasie 0,0 może wynosić 0,0. W czasie 0,5 s wartość może wynosić 20,0 dla X. W czasie 1,0 s wartość może wynosić 0,0. Możemy zakończyć naszą animację o 1.0s.

Długość animacji zależy od ostatnich kluczy dodanych do animacji. Możesz dodać więcej klawiszy, aby wygładzić interpolację.

Animacja duszka 2D

Animacja duszka polega na pokazaniu istniejącej sekwencji obrazów lub ramek.

Najpierw zaimportuj sekwencję obrazów do folderu zasobów. Utwórz kilka obrazów od zera lub pobierz je ze sklepu Asset Store. (W tym przykładzie użyto tego bezpłatnego zasobu ).

wybrane duszki animacji

Przeciągnij każdy pojedynczy obraz pojedynczej animacji z folderu zasobów do widoku sceny. Unity wyświetli okno dialogowe do nazwania nowego klipu animacji.

okno dialogowe nazwy klipu animacji

Jest to przydatny skrót do:

  • tworzenie nowych obiektów gry
  • przypisywanie dwóch komponentów (Renderer Sprite i Animator)
  • tworzenie kontrolerów animacji (i łączenie z nimi nowego komponentu Animator)
  • tworzenie klipów animacyjnych z wybranymi ramkami

nowy inspektor obiektów gry pokazujący nowe komponenty

Wyświetl podgląd odtwarzania na karcie animacji, klikając Odtwórz:

Podgląd animacji 2D

Tej samej metody można użyć do tworzenia nowych animacji dla tego samego obiektu gry, a następnie usuwania nowego obiektu gry i kontrolera animacji. Dodaj nowy klip animacji do kontrolera animacji tego obiektu w taki sam sposób, jak w przypadku animacji 3D.

Krzywe animacji

Krzywe animacji umożliwiają zmianę parametru pływaka podczas odtwarzania animacji. Na przykład, jeśli istnieje animacja o długości 60 sekund i chcesz, aby wartość / parametr zmiennoprzecinkowy zmieniała się w zależności od animacji (jak w czasie animacji = 0,0s; X = 0,0, w czasie animacji = 30,0s; X = 1,0, w czasie animacji = 60,0 s; X = 0,0).

Gdy uzyskasz wartość zmiennoprzecinkową, możesz jej użyć do tłumaczenia, obracania, skalowania lub używania jej w jakikolwiek inny sposób.

Na przykład pokażę działający obiekt gry gracza. Gdy odtwarzana jest animacja uruchamiania, szybkość tłumaczenia odtwarzacza powinna rosnąć wraz z postępem animacji. Gdy animacja osiągnie koniec, szybkość tłumaczenia powinna się zmniejszyć.

Mam utworzony klip animacji. Wybierz klip, a następnie w oknie inspektora kliknij Edytuj.

wprowadź opis zdjęcia tutaj

Tam przewiń w dół do opcji Krzywe. Kliknij znak +, aby dodać krzywą. Nazwij krzywą, np. ForwardRunCurve. Kliknij miniaturową krzywą po prawej stronie. Otworzy się małe okno z domyślną krzywą.

wprowadź opis zdjęcia tutaj

Chcemy krzywej o kształcie parabolicznym, w której wznosi się, a następnie opada. Domyślnie na linii znajdują się 2 punkty. Możesz dodać więcej punktów, klikając dwukrotnie krzywą. Przeciągnij punkty, aby utworzyć kształt podobny do następującego.

wprowadź opis zdjęcia tutaj

W oknie animatora dodaj działający klip. Dodaj również parametr zmiennoprzecinkowy o tej samej nazwie co krzywa, tj. ForwardRunCurve.

Podczas odtwarzania animacji wartość zmiennoprzecinkowa zmienia się zgodnie z krzywą. Poniższy kod pokaże, jak używać wartości zmiennoprzecinkowej:

using UnityEngine;
using System.Collections;

public class RunAnimation : MonoBehaviour {

Animator animator;
float curveValue;

void Start()
{
    animator = GetComponent<Animator>();
}

void Update()
{
    curveValue = animator.GetFloat("ForwardRunCurve");

    transform.Translate (Vector3.forward * curveValue);
}

}

Zmienna curveValue przechowuje wartość krzywej (ForwardRunCruve) w dowolnym momencie. Używamy tej wartości do zmiany prędkości tłumaczenia. Możesz dołączyć ten skrypt do obiektu gry gracza.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow