【Unity Inverse Dynamics IK】キャラクターの手足をアレンジ通りに動かそう!IK を使用してさまざまなアニメーション効果を実現します

効果:

 

1: IK を理解する

1.インバースキネマティクス IK (インバースキネマティクス) は、特定のサブジョイントの最終位置と角度に基づいて、ノード チェーン上の他のノードの適切な位置を逆に推定することができ、Unity のアバターを持つすべての人型キャラクターは IK 機能をサポートしています

2. IK 機能を使用するには、 Animator ウィンドウの対応するレイヤーでIK Pass をチェックする必要があります。チェックすると、スクリプト内の OnAnimationIK() がフレームごとに呼び出されます設定するノードは、 left hand、right hand、left foot、right foot、head の5 つです

 

 知らせ:

キャラクタースケルトンのアニメーションタイプ設定 リグ:ヒューマノイド

3. この記事には API が含まれています

セット位置とその重み

Animator.SetLookAtWeigh (浮動小数点ウェイト);

Animator.SetLookAtPosition (Vector3 lookAtPosition);

Animator.SetIKPosition (AvatarIKGoal 目標、Vector3 目標位置);

Animator.SetIKPositionWeight (AvatarIKGoal 目標、浮動小数点値);

2: 具体的な実装

 

1: キャラクターにはアニメーター コントローラーが必要です。IKパスを確認してください。

2:脚本

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()
    {
        
    }
}

 注: 体の一部を表すこれらの変換は、シーンに追加した球です。

Anim とは、自分の体のアニメーション コンポーネントを指します。

 3: 効果を得るために走る

おすすめ

転載: blog.csdn.net/m0_74022070/article/details/130578387