unity3d
Unity Animation
Sök…
Grundläggande animering för löpning
Den här koden visar ett enkelt exempel på animering i Unity.
I det här exemplet bör du ha 2 animationsklipp; Kör och ledig. Dessa animationer bör vara Stand-in-Place-rörelser. När animeringsklippen har valts, skapar du en animatorkontroller. Lägg till denna Controller till spelaren eller spelobjektet du vill animera.
Öppna alternativet Animator från Windows. Dra de 2 animationsklippen till Animator-fönstret och två tillstånd skulle skapas. När du har skapat, använd den vänstra parametern för att lägga till två parametrar, båda som bool. Namnge en som "PerformRun" och annan som "PerformIdle". Ställ in "PerformIdle" till true.
Gör övergångar från viloläge till Kör och Kör till viloläge (Se bilden). Klicka på Tomgång-> Kör övergång och avmarkera HasExit i inspektionsfönstret. Gör samma sak för den andra övergången. För Idle-> Run-övergång, lägg till ett villkor: PerformIdle. För Run-> Idle, lägg till ett villkor: PerformRun. Lägg till C # -skriptet nedan i spelobjektet. Det ska köras med animering med hjälp av upp-knappen och rotera med vänster- och högerknappar.
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);
}
}
}
}
Skapa och använda animationsklipp
Detta exempel visar hur man skapar och använder animationsklipp för spelobjekt eller spelare.
Observera att modellerna som används i detta exempel laddas ner från Unity Asset Store. Spelaren laddades ner från följande länk: https://www.assetstore.unity3d.com/sv/#!/content/21874 .
För att skapa animationer, öppna först Animeringsfönstret. Du kan öppna det genom att klicka på Fönster och Välj animering eller trycka på Ctrl + 6. Välj spelobjektet som du vill använda animationsklippet från hierarkifönstret och klicka sedan på Skapa-knappen i animeringsfönstret.
Namnge din animation (som IdlePlayer, SprintPlayer, DyingPlayer etc.) och spara den. Klicka nu på Lägg till egendom från animeringsfönstret. Detta gör att du kan ändra egenskapen för spelobjektet eller spelaren med avseende på tid. Detta kan inkludera tranformer som rotation, position och skala och annan egenskap som är kopplad till spelobjektet, t.ex. Collider, Mesh Renderer etc.
För att skapa en löpande animation för spelobjekt behöver du en humanoid 3D-modell. Du kan ladda ner modellen från ovanstående länk. Följ stegen ovan för att skapa en ny animation. Lägg till en Transform-egenskap och välj Rotation för ett av teckenbenet.
För närvarande skulle din Play-knapp och rotationsvärden i spelobjektegenskapen ha blivit röd. Klicka på rullgardinspilen för att se värdena för X, Y och Z. Standard animationstid är inställd på 1 sekund. Animationer använder nyckelramar för att interpolera mellan värden. För att animera, lägg till tangenter på olika tidpunkter och ändra rotationsvärdena från inspektionsfönstret. Till exempel kan rotationsvärdet vid tiden 0,0s vara 0,0. Vid tidpunkten 0,5s kan värdet vara 20,0 för X. Vid tiden 1.0s kan värdet vara 0,0. Vi kan avsluta vår animering på 1.0s.
Din animationslängd beror på de senaste knapparna som du lägger till i animeringen. Du kan lägga till fler nycklar för att göra interpolationen jämnare.
2D Sprite-animering
Sprite-animering består i att visa en befintlig sekvens av bilder eller ramar.
Importera först en sekvens av bilder till tillgångsmappen. Antingen skapa några bilder från grunden eller ladda ner några från Asset Store. (Det här exemplet använder denna gratis tillgång .)
Dra varje enskild bild av en enda animation från tillgångsmappen till scenvyn. Enhet visar en dialogruta för namngivning av det nya animationsklippet.
Detta är en användbar genväg för:
- skapa nya spelobjekt
- tilldela två komponenter (en Sprite Renderer och en Animator)
- skapa animeringskontroller (och länka den nya animatorkomponenten till dem)
- skapa animationsklipp med de valda ramarna
Förhandsgranska uppspelningen på animationsfliken genom att klicka på Spela:
Samma metod kan användas för att skapa nya animationer för samma spelobjekt och sedan ta bort det nya spelobjektet och animeringskontrollern. Lägg till det nya animationsklippet till animationskontrollern för det objektet på samma sätt som med 3D-animering.
Animeringskurvor
Animeringskurvor låter dig ändra en flottörparameter när animationen spelas upp. Om det till exempel finns en animation med längd 60 sekunder och du vill ha ett flytvärde / parameter, kallar det X, för att variera genom animeringen (som vid animeringstid = 0,0s; X = 0,0, vid animationstid = 30,0s; X = 1,0, vid animeringstid = 60,0; X = 0,0).
När du har flyttvärdet kan du använda det för att översätta, rotera, skala eller använda det på något annat sätt.
För mitt exempel visar jag ett spelspelobjekt som körs. När animationen för körningar spelas bör spelarens översättningshastighet öka när animationen fortskrider. När animeringen når sitt slut bör översättningshastigheten minska.
Jag har skapat ett löpande animationsklipp. Välj klippet och klicka sedan på Redigera i inspektionsfönstret.
När du är där, bläddra ner till kurvor. Klicka på + -tecknet för att lägga till en kurva. Namnge kurvan t.ex. ForwardRunCurve. Klicka på miniatyrkurvan till höger. Det öppnar ett litet fönster med en standardkurva i det.
Vi vill ha en parabolformad kurva där den stiger och sedan faller. Som standard finns det två punkter på linjen. Du kan lägga till fler poäng genom att dubbelklicka på kurvan. Dra punkterna för att skapa en form som liknar följande.
Lägg till det löpande klippet i Animator-fönstret. Lägg också till en flottörparameter med samma namn som kurvan, dvs ForwardRunCurve.
När animeringen spelas kommer floatvärdet att ändras enligt kurvan. Följande kod visar hur du använder floatvärdet:
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);
}
}
Variabeln curveValue håller värdet på kurvan (ForwardRunCruve) vid en viss tidpunkt. Vi använder det värdet för att ändra översättningens hastighet. Du kan bifoga detta skript till spelarobjektet.