unity3d
Animation der Einheit
Suche…
Grundlegende Animation zum Laufen
Dieser Code zeigt ein einfaches Beispiel für eine Animation in Unity.
Für dieses Beispiel sollten Sie zwei Animationsclips haben. Run and Idle. Diese Animationen sollten Stand-In-Place-Bewegungen sein. Wenn Sie die Animationsclips ausgewählt haben, erstellen Sie einen Animator-Controller. Fügen Sie diesen Controller dem Spieler oder Spielobjekt hinzu, das Sie animieren möchten.
Öffnen Sie das Animator-Fenster von Windows aus. Ziehen Sie die 2 Animationsclips in das Animator-Fenster. Es werden 2 Status erstellt. Nach dem Erstellen können Sie auf der linken Registerkarte "Parameter" zwei Parameter hinzufügen, beide als Bool. Nennen Sie einen als "PerformRun" und einen anderen als "PerformIdle". Setzen Sie "PerformIdle" auf "true".
Machen Sie Übergänge vom Ruhezustand zu Run und Run to Idle (Siehe Abbildung). Klicken Sie auf Leerlauf-> Übergang ausführen, und deaktivieren Sie HasExit im Inspektorfenster. Machen Sie dasselbe für den anderen Übergang. Fügen Sie für Idle-> Run-Übergang eine Bedingung hinzu: PerformIdle. Fügen Sie für Run-> Idle eine Bedingung hinzu: PerformRun. Fügen Sie das unten angegebene C # -Skript zum Spielobjekt hinzu. Es sollte mit der Aufwärts-Taste mit Animation laufen und mit den Links- und Rechts-Tasten drehen.
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);
}
}
}
}
Animationsclips erstellen und verwenden
Dieses Beispiel zeigt, wie Animationsclips für Spielobjekte oder Spieler erstellt und verwendet werden.
Beachten Sie, dass die in diesem Beispiel verwendeten Modelle vom Unity Asset Store heruntergeladen werden. Der Player wurde unter folgendem Link heruntergeladen: https://www.assetstore.unity3d.com/de/#!/content/21874 .
Um Animationen zu erstellen, öffnen Sie zuerst das Animationsfenster. Sie können es öffnen, indem Sie auf Fenster und Animation auswählen klicken oder Strg + 6 drücken. Wählen Sie im Hierarchiefenster das Spielobjekt aus, auf das Sie den Animationsclip anwenden möchten, und klicken Sie dann im Animationsfenster auf die Schaltfläche Erstellen.
Benennen Sie Ihre Animation (wie IdlePlayer, SprintPlayer, DyingPlayer usw.) und speichern Sie sie. Klicken Sie nun im Animationsfenster auf die Schaltfläche Eigenschaft hinzufügen. Auf diese Weise können Sie die Eigenschaften des Spielobjekts oder Spielers zeitlich ändern. Dies kann Transformationsformen wie Rotation, Position und Skalierung sowie andere Eigenschaften enthalten, die an das Spielobjekt angehängt sind, z. B. Collider, Mesh Renderer usw.
Um eine laufende Animation für ein Spielobjekt zu erstellen, benötigen Sie ein humanoides 3D-Modell. Sie können das Modell über den obigen Link herunterladen. Befolgen Sie die obigen Schritte, um eine neue Animation zu erstellen. Fügen Sie eine Transformationseigenschaft hinzu und wählen Sie Rotation für einen der Charakterbeine.
In diesem Moment wären Ihre Play-Schaltfläche und die Rotation-Werte in der Spielobjekteigenschaft rot. Klicken Sie auf den Dropdown-Pfeil, um die X-, Y- und Z-Werte für die Drehung anzuzeigen. Die Standardanimationszeit ist auf 1 Sekunde eingestellt. Animationen verwenden Keyframes, um zwischen Werten zu interpolieren. Fügen Sie zum Animieren Schlüssel zu verschiedenen Zeitpunkten hinzu und ändern Sie die Rotationswerte im Inspektorfenster. Zum Beispiel kann der Rotationswert zum Zeitpunkt 0,0s 0,0 sein. Zur Zeit 0,5 s kann der Wert für X 20,0 sein. Zur Zeit 1,0 s kann der Wert 0,0 sein. Wir können unsere Animation bei 1.0s beenden.
Ihre Animationslänge hängt von den letzten Schlüsseln ab, die Sie der Animation hinzufügen. Sie können weitere Tasten hinzufügen, um die Interpolation weicher zu gestalten.
2D-Sprite-Animation
Bei der Sprite-Animation wird eine vorhandene Folge von Bildern oder Frames angezeigt.
Importieren Sie zunächst eine Folge von Bildern in den Asset-Ordner. Erstellen Sie entweder einige Bilder von Grund auf oder laden Sie sie im Asset Store herunter. (In diesem Beispiel wird dieses kostenlose Asset verwendet .)
Ziehen Sie jedes einzelne Bild einer einzelnen Animation aus dem Assets-Ordner in die Szenenansicht. Unity zeigt ein Dialogfeld zum Benennen des neuen Animationsclips an.
Dies ist eine nützliche Verknüpfung für:
- Neue Spielobjekte erstellen
- Zuweisen von zwei Komponenten (ein Sprite-Renderer und ein Animator)
- Animations-Controller erstellen (und die neue Animator-Komponente mit ihnen verknüpfen)
- Animationsclips mit den ausgewählten Frames erstellen
Vorschau der Wiedergabe in der Animationsregisterkarte durch Klicken auf Wiedergabe:
Dieselbe Methode kann verwendet werden, um neue Animationen für dasselbe Spielobjekt zu erstellen und dann das neue Spielobjekt und den Animationscontroller zu löschen. Fügen Sie den neuen Animationsclip auf dieselbe Weise wie bei der 3D-Animation zum Animationscontroller dieses Objekts hinzu.
Animationskurven
Mit Animationskurven können Sie einen Float-Parameter während der Wiedergabe der Animation ändern. Wenn beispielsweise eine Animation mit einer Länge von 60 Sekunden vorhanden ist und Sie einen Float-Wert / -Parameter wünschen, nennen Sie ihn X, um durch die Animation zu variieren (wie bei Animationszeit = 0,0s; X = 0,0, bei Animationszeit = 30,0s; X = 1,0, zur Animationszeit = 60,0 s; X = 0,0).
Sobald Sie den Float-Wert haben, können Sie ihn zum Übersetzen, Drehen, Skalieren oder auf andere Weise verwenden.
Für mein Beispiel zeige ich ein laufendes Spielobjekt. Wenn die Animation für einen Lauf abgespielt wird, sollte sich die Übersetzungsgeschwindigkeit des Players im Verlauf der Animation erhöhen. Wenn die Animation ihr Ende erreicht hat, sollte sich die Übersetzungsgeschwindigkeit verringern.
Ich habe einen laufenden Animationsclip erstellt. Wählen Sie den Clip aus und klicken Sie dann im Inspektorfenster auf Bearbeiten.
Wenn Sie dort sind, scrollen Sie nach unten zu Curves. Klicken Sie auf das Pluszeichen, um eine Kurve hinzuzufügen. Benennen Sie die Kurve, zB ForwardRunCurve. Klicken Sie auf die Miniaturkurve rechts. Es öffnet sich ein kleines Fenster mit einer Standardkurve.
Wir wollen eine parabelförmige Kurve, in der sie steigt und dann fällt. Standardmäßig befinden sich 2 Punkte auf der Linie. Sie können weitere Punkte hinzufügen, indem Sie auf die Kurve doppelklicken. Ziehen Sie die Punkte, um eine Form ähnlich der folgenden zu erstellen.
Fügen Sie im Animator-Fenster den laufenden Clip hinzu. Fügen Sie außerdem einen Float-Parameter mit demselben Namen wie die Kurve hinzu, z. B. ForwardRunCurve.
Wenn die Animation abgespielt wird, ändert sich der Float-Wert entsprechend der Kurve. Der folgende Code zeigt, wie der Float-Wert verwendet wird:
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);
}
}
Die Variable curveValue enthält den Wert der Kurve (ForwardRunCruve) zu einem bestimmten Zeitpunkt. Wir verwenden diesen Wert, um die Geschwindigkeit der Übersetzung zu ändern. Sie können dieses Skript an das Spielobjekt des Spielers anhängen.