[Unity Inverse Dynamics IK] Laissez les membres du personnage suivre vos arrangements ! Utilisez IK pour obtenir divers effets d'animation

Effet:

 

1 : Comprendre les connaissances autochtones

1. Cinématique inverse IK (cinématique inverse) peut déduire inversement les positions raisonnables d'autres nœuds sur la chaîne de nœuds en fonction des positions finales et des angles de certaines sous-articulations. Tous les personnages humanoïdes avec Avatar dans Unity prennent en charge la fonction IK.

2. Pour utiliser la fonction IK, vous devez cocher IK Pass dans le calque correspondant de la fenêtre Animator.Après vérification, OnAnimationIK() dans le script sera appelé à chaque image . Il y a cinq nœuds à définir : main gauche, main droite, pied gauche, pied droit et tête .

 

 Avis:

Paramètres du type d'animation dans le squelette du personnage Rig : Humanoïde

3. Cet article concerne l'API

Définir la position et son poids

Animator.SetLookAtWeigh (poids flottant);

Animateur.SetLookAtPosition (Vector3 lookAtPosition);

Animator.SetIKPosition (objectif AvatarIKGoal, objectif Vector3);

Animator.SetIKPositionWeight (objectif AvatarIKGoal, valeur flottante) ;

Deux : mise en œuvre spécifique

 

1 : Le personnage a besoin d'Animator Controller, cochez IK Pass

2 : Scénario

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerControl : MonoBehaviour
{
    public Animator anim;      //动画
    public Transform head;     //头部
    public Transform lefthand;  //左手
    public Transform righthand; //右手
    public Transform leftfoot;  //左脚
    public Transform rightfoot; //右脚

   

    private void OnAnimatorIK(int layerIndex)
    {
        anim.SetLookAtWeight(1);
        anim.SetLookAtPosition(head.position); //头部看向
        anim.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1); 
        anim.SetIKPosition(AvatarIKGoal.LeftHand,lefthand.position); //左手位置
        anim.SetIKPositionWeight(AvatarIKGoal.RightHand, 1); 
        anim.SetIKPosition(AvatarIKGoal.RightHand,righthand.position); //右手位置
        anim.SetIKPositionWeight(AvatarIKGoal.LeftFoot,1); 
        anim.SetIKPosition(AvatarIKGoal.LeftFoot, leftfoot.position); //左脚位置
        anim.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1); 
        anim.SetIKPosition(AvatarIKGoal.RightFoot, rightfoot.position); //右脚位置


    }
    void Update()
    {
        
    }
}

 Remarque : Ces transformations représentant des parties du corps sont les sphères que nous avons ajoutées à la scène.

anim fait référence au composant d'animation sur son propre corps

 3 : Courez pour obtenir l’effet

Je suppose que tu aimes

Origine blog.csdn.net/m0_74022070/article/details/130578387
conseillé
Classement