unity3d
Unité d'animation
Recherche…
Animation de base pour la course
Ce code montre un exemple simple d'animation dans Unity.
Pour cet exemple, vous devriez avoir 2 clips d'animation; Run et Idle. Ces animations doivent être des mouvements sur place. Une fois les clips d'animation sélectionnés, créez un contrôleur Animator. Ajoutez ce contrôleur au lecteur ou à l'objet de jeu que vous souhaitez animer.
Ouvrez la fenêtre Animator à partir de l'option Windows. Faites glisser les 2 clips d'animation dans la fenêtre Animator et 2 états seront créés. Une fois créé, utilisez l'onglet des paramètres de gauche pour ajouter 2 paramètres, tous deux en tant que bool. Nommez-en un comme "PerformRun" et un autre comme "PerformIdle". Définissez "PerformIdle" sur true.
Effectuez des transitions à partir de l'état inactif pour exécuter et exécuter au ralenti (reportez-vous à l'image). Cliquez sur Idle-> Run transition et dans la fenêtre Inspector, désélectionnez HasExit. Faites la même chose pour l'autre transition. Pour Idle-> Run transition, ajoutez une condition: PerformIdle. Pour Run-> Idle, ajoutez une condition: PerformRun. Ajoutez le script C # ci-dessous à l'objet de jeu. Il devrait fonctionner avec l'animation à l'aide du bouton Haut et faire pivoter avec les boutons Gauche et Droite.
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);
}
}
}
}
Création et utilisation de clips d'animation
Cet exemple montre comment créer et utiliser des clips d'animation pour des objets de jeu ou des joueurs.
Remarque: les modèles utilisés dans cet exemple sont téléchargés depuis Unity Asset Store. Le lecteur a été téléchargé à partir du lien suivant: https://www.assetstore.unity3d.com/en/#!/content/21874 .
Pour créer des animations, ouvrez d'abord la fenêtre d'animation. Vous pouvez l'ouvrir en cliquant sur Window et Select Animation ou appuyez sur Ctrl + 6. Sélectionnez l'objet de jeu auquel vous souhaitez appliquer le clip d'animation dans la fenêtre Hiérarchie, puis cliquez sur le bouton Créer de la fenêtre d'animation.
Nommez votre animation (comme IdlePlayer, SprintPlayer, DyingPlayer, etc.) et enregistrez-la. Maintenant, à partir de la fenêtre d'animation, cliquez sur le bouton Ajouter une propriété. Cela vous permettra de modifier la propriété de l’objet ou du joueur dans le temps. Cela peut inclure des formes Tran comme la rotation, la position et l'échelle et toute autre propriété attachée à l'objet de jeu, par exemple Collider, Mesh Renderer, etc.
Pour créer une animation en cours d'exécution pour un objet de jeu, vous aurez besoin d'un modèle 3D humanoïde. Vous pouvez télécharger le modèle à partir du lien ci-dessus. Suivez les étapes ci-dessus pour créer une nouvelle animation. Ajoutez une propriété Transform et sélectionnez Rotation pour l'un des segments de caractère.
À ce moment, votre bouton de lecture et vos valeurs de rotation dans la propriété objet du jeu seraient devenus rouges. Cliquez sur la flèche déroulante pour voir les valeurs de rotation X, Y et Z. Le temps d'animation par défaut est défini sur 1 seconde. Les animations utilisent des images clés pour interpoler entre les valeurs. Pour animer, ajoutez des clés à différents moments et modifiez les valeurs de rotation à partir de la fenêtre Inspecteur. Par exemple, la valeur de rotation à l'instant 0.0s peut être 0.0. Au temps 0.5s, la valeur peut être 20.0 pour X. Au moment 1.0s, la valeur peut être 0.0. Nous pouvons terminer notre animation à 1.0s.
La longueur de votre animation dépend des dernières clés ajoutées à l'animation. Vous pouvez ajouter d'autres touches pour rendre l'interpolation plus fluide.
Animation 2D Sprite
L'animation de sprite consiste à afficher une séquence d'images ou de cadres existante.
Commencez par importer une séquence d'images dans le dossier des ressources. Soit créer des images à partir de zéro ou en télécharger à partir de l'Asset Store. (Cet exemple utilise cet actif gratuit .)
Faites glisser chaque image individuelle d'une animation unique du dossier des ressources vers la vue de la scène. Unity affichera une boîte de dialogue pour nommer le nouveau clip d'animation.
Ceci est un raccourci utile pour:
- créer de nouveaux objets de jeu
- assigner deux composants (un moteur de rendu Sprite et un animateur)
- créer des contrôleurs d'animation (et y associer le nouveau composant Animator)
- créer des clips d'animation avec les images sélectionnées
Prévisualisez la lecture dans l'onglet Animation en cliquant sur Lecture:
La même méthode peut être utilisée pour créer de nouvelles animations pour le même objet de jeu, puis supprimer le nouvel objet de jeu et le nouveau contrôleur d'animation. Ajoutez le nouveau clip d'animation au contrôleur d'animation de cet objet de la même manière qu'avec l'animation 3D.
Courbes d'animation
Les courbes d'animation vous permettent de modifier un paramètre flottant au fur et à mesure de la lecture de l'animation. Par exemple, s'il y a une animation de longueur 60 secondes et que vous voulez une valeur / paramètre float, appelez-la X, pour varier dans l'animation (comme au temps d'animation = 0.0s; X = 0.0 au moment de l'animation = 30.0s); X = 1,0, au moment de l'animation = 60,0s; X = 0,0).
Une fois que vous avez la valeur flottante, vous pouvez l'utiliser pour traduire, faire pivoter, mettre à l'échelle ou l'utiliser de toute autre manière.
Pour mon exemple, je montrerai un objet de jeu de joueur en cours d'exécution. Lorsque l'animation de la lecture est lancée, la vitesse de traduction du lecteur doit augmenter à mesure que l'animation se poursuit. Lorsque l'animation arrive à son terme, la vitesse de traduction doit diminuer.
J'ai un clip d'animation en cours de création. Sélectionnez le clip puis dans la fenêtre de l'inspecteur, cliquez sur Modifier.
Une fois là-bas, faites défiler jusqu'à Curves. Cliquez sur le signe + pour ajouter une courbe. Nommez la courbe, par exemple ForwardRunCurve. Cliquez sur la courbe miniature à droite. Il ouvrira une petite fenêtre avec une courbe par défaut.
Nous voulons une courbe de forme parabolique là où elle monte puis diminue. Par défaut, il y a 2 points sur la ligne. Vous pouvez ajouter plus de points en double-cliquant sur la courbe. Faites glisser les points pour créer une forme similaire à la suivante.
Dans la fenêtre de l'animateur, ajoutez le clip en cours d'exécution. Ajoutez également un paramètre float avec le même nom que la courbe, à savoir ForwardRunCurve.
Lors de la lecture de l'animation, la valeur flottante change en fonction de la courbe. Le code suivant montre comment utiliser la valeur float:
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);
}
}
La variable curveValue contient la valeur de la courbe (ForwardRunCruve) à un moment donné. Nous utilisons cette valeur pour modifier la vitesse de la traduction. Vous pouvez attacher ce script à l'objet de jeu du joueur.