Animation du programme Unity


Explication de l'animation du programme Unity

insérez la description de l'image ici

提示:以下是本篇文章正文内容,下面案例可供参考

1. Qu'est-ce que l'animation procédurale ?

L'animation procédurale est une animation qui peut apporter des modifications correspondantes avec le changement de terrain de la scène via un script c # plus une animation squelettique inversée.


2. Utilisez les étapes

1. Construire un modèle

Utilisez Blender pour construire un modèle de robot bipède simple
提示:腿部关节需要将坐标原点设立在模型顶部
insérez la description de l'image ici

insérez la description de l'image ici
Définissez ensuite la relation enfant-parent de l'objet,
insérez la description de l'image ici
sélectionnez tous les objets composés et sélectionnez fbx à exporter.
Dans blender,
-y du modèle correspond à z en unité,
z du modèle correspond à y en unité ;

2. Construction osseuse

Installez animation rigging
insérez la description de l'image ici
, faites glisser le modèle exporté dans l'actif, puis faites-le glisser dans la scène, puis créez un nœud vide en tant que nœud parent de l'objet, puis créez deux objets vides en tant que plante des pieds aux deux jambes les plus basses. les articulations.
insérez la description de l'image ici
Sélectionnez ensuite le nœud parent général pour générer des os
insérez la description de l'image ici
insérez la description de l'image ici
, puis continuez à sélectionner le nœud parent principal pour générer le module de contrôle ik.
insérez la description de l'image ici
Après la génération, vous pouvez voir un objet vide de rig, puis créer un nouvel objet vide à gauche et à droite sous rig.
Construisez ensuite deux objets vides sous les deux objets vides.
insérez la description de l'image ici
Ajoutez le composant Tow Bone à gauche et à droite, et faites glisser la transformation de chaque partie de la jambe respectivement. La cible et l'indice sont les deux sous-objets que nous venons de créer. la cible est la position de la plante du pied et l'indice est la position du genou.
insérez la description de l'image ici
Une fois les paramètres ci-dessus terminés, nous commencerons notre propre partie de code.

3. Partie code

Faites glisser le code vers la cible de chaque pied.
idées de codes
提示:射线函数ray的第一个参数为发射位置,第二个为发射方向,是相对于第一个参数的局部向量,

  1. Tirez des rayons verticaux vers le bas sur les côtés gauche et droit du corps pour obtenir la position cible de la plante des pieds.
  2. Pour juger si la distance de la position cible est supérieure à la distance de pas définie, si elle est supérieure à la distance des autres jambes et qu'aucune autre jambe ne bouge, la jambe commence à bouger et le pas utilise la fonction Lerp pour calculer la distance au point cible.
  3. Commencer quand une jambe fait un pas, la variable interne lerp = 0, chaque trame lerp + Time.deltaTime * speed, pour interpoler avec la position de la nouvelle semelle, après que le pas soit terminé, lerp>1.
  4. Pour les pas de pieds, la fonction sin est utilisée pour mettre les pieds.
public class target : MonoBehaviour
{
    
    
    public Transform body;
    public Transform endbody;//身体
    public LayerMask terrainLayer;          //检测图层
    public  Vector3 newposition, oldposition, currentposition; //位置
    public float footSpacing1,footSpacing2; //落点偏移
    public float stepstance;                //步长
    public float high = 0.1f;               //高度
    public float speed = 2;                 //速度
    float lerp = 1;
    public target leg1,leg2;                //约束

    private void Start()
    {
    
    
        newposition = transform.position;
        currentposition = transform.position;
        oldposition = transform.position;
    }

    void Update()
    {
    
    
        transform.position = currentposition;
        Vector3 start = body.position + (body.forward * footSpacing1) + (body.right * footSpacing2);
        Vector3 end = new Vector3(body.position.x,-2,body.position.z) + (body.forward * footSpacing1) + (body.right * footSpacing2);
        Ray ray = new Ray(start,Vector3.down );
        Debug.DrawLine(start,end,Color.red);
 
        if (Physics.Raycast(ray,out RaycastHit info, 20, terrainLayer.value))
        {
    
    
            
            
            if (Vector3.Distance(newposition, info.point) > stepstance && leg1.lerp >= 1 )//&& leg2.lerp >= 1
            {
    
    
                
                lerp = 0;
                newposition = info.point;
            }

            if (lerp<1)
            {
    
    
                newposition = info.point;
            }
        }

        
        if (lerp < 1)
        {
    
    
            
            Vector3 footposition = Vector3.Lerp(oldposition, newposition, lerp);
            footposition.y += Mathf.Sin(lerp * Mathf.PI) * high;
            currentposition = footposition;
            lerp += Time.deltaTime * speed;
        }
        else
        {
    
    
            
            oldposition = newposition;
           
        }

        
    }

    private void OnDrawGizmos()
    {
    
    
        Gizmos.color = Color.red;       
        Gizmos.DrawSphere(newposition, 0.1f);
                                           
        
    }
}

4. Adaptation de la position du corps du personnage

L'idée générale est de ne pas coller le code ici.Utilisez
la position du point médian entre les positions de deux cibles comme point de référence pour calculer la distance entre le corps et le sol. Utilisez la fonction lerp pour maintenir une certaine distance entre la direction y du corps et le point de référence au sol.

Résumer

Je suis occupé, donc le code et les articles sont plus généraux. (En fait doge paresseux)
Si vous avez des questions, rendez-vous dans l'espace commentaire.
Juste parce que vous êtes si belle, laissez un abonnement avant de partir.

Je suppose que tu aimes

Origine blog.csdn.net/applex250/article/details/127832088
conseillé
Classement