UnityでAnimatorのIK機能を使う方法です。
Unity2018.3.1
何ができる?
IK(Inverse Kinematics)を使うとモーション中にあるオブジェクトに注視させたり、
手や足だけをあるオブジェクトに自然にくっつけることができます。
設定次第で歩いているモーション中にキャラに物を持たせたりできます。
使い方
IKを使うにはまずAnimator ControllerのLayerの歯車ボタンからIK Passにチェックを入れます。
次にこんな感じのスクリプトを書きます。
using UnityEngine; public class AnimatorExample : MonoBehaviour { public Animator Animator { get { return GetComponent<Animator>(); } } [SerializeField] private Transform _lookTarget; [SerializeField] private Transform _leftHandIkTarget; [SerializeField, Range(0, 1)] private float _ikWeight; private void OnAnimatorIK(int layerIndex) { if (_lookTarget != null) { Animator.SetLookAtWeight(_ikWeight); Animator.SetLookAtPosition(_lookTarget.position); } if (_leftHandIkTarget != null) { Animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, _ikWeight); Animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, _ikWeight); Animator.SetIKPosition(AvatarIKGoal.LeftHand, _leftHandIkTarget.position); Animator.SetIKRotation(AvatarIKGoal.LeftHand, _leftHandIkTarget.rotation); } } }
_ikWeightが1に近づくほどIKで計算された姿勢が反映されます。
上記のスクリプトでは注視点と左手の位置がIKで変えられるようにしています。
結果
注視点を動かすとこのような結果になります。
左手を動かすとこのような結果になります。
Humanoidのみの機能
IKはHumanoidのみの機能となります。
Genericなモデルには適用できないのでご注意ください。