効果:
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: 効果を得るために走る