Unity解説 Humanoidモデル操作1
今回は、UnityのInputmanager機能を用いたHumanoidの3Dキャラクターを操作するスクリプトを作成しようと思います。
はい✨
まずは、3Dキャラクターが移動する方向を定めるため、3Dキャラクターを旋回されるスクリプトを作ってみます。これには「Transform.RotateAroundメソッド」を使用します。
【HumanoidTurning001.cs】
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HumanoidTurning001 : MonoBehaviour { private Animator animator; void Start() { animator = GetComponent(); } void Update() { var Turning = Input.GetAxis ("Horizontal"); //右旋回 if(Turning > 0){ animator.SetBool("TurnRight", true); var jiposi = transform.position; //自分の位置を取得 float kaitenchi = Turning; kaitenchi = kaitenchi * 0.3f; //回転値を調整 transform.RotateAround(jiposi, Vector3.up, kaitenchi); }else{ animator.SetBool("TurnRight", false); } //左旋回 if(Turning < 0){ animator.SetBool("TurnLeft", true); var jiposi = transform.position; //自分の位置を取得 float kaitenchi = Turning; kaitenchi = kaitenchi * 0.3f; //回転値を調整 transform.RotateAround(jiposi, Vector3.up, kaitenchi); }else{ animator.SetBool("TurnLeft", false); } } }
【mixamo】
用意した全てのAnimation ClipのInspector画面で、「Loop Time」にチェックを入れておく必要があります。
これをHumanoidモデルのControllerに適用しておきます。 また、ここで「Apply Root Motion」のチェックを外しておきます。
次に、新しいStateを作成し、Motionを先ほど用意した待機のAnimation Clip(Idle050)を選択します。
新しいStateを作成し、右旋回のアニメーションを適用して、Make Transitionで往復に繋ぎます。 Stateの名前は「!RightTurn001」としました。
同様に左旋回用のStateも作成し、同様の設定を行います。ここでは、「!LeftTurn001」というStateの名前にしました。
まず、今回作成した4つのTransitionの「Has Exit Time」 のチェックを外します。
「Has Exit Time」が有効になっていますと、直前のAnimatorのモーションに影響され、即座にモーションが始められないから、今回は無効にしました。
【Unity公式マニュアル アニメーション遷移】
https://docs.unity3d.com/ja/560/Manual/class-Transition.html
はい、それでは次は走るモーションができるようにしていきます。
サンプルスクリプトは以下のとおりです。
【HumanoidRuning001.cs】
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HumanoidRuning001 : MonoBehaviour { private Rigidbody charaRb; private Animator animator; void Start() { animator = GetComponent(); charaRb = GetComponent (); } void Update() { //使用する入力値を変数へ var zengo = Input.GetAxis ("Vertical"); //前進 if(zengo > 0){ animator.SetBool("Run", true); var jiposi = transform.position; //自分の位置を取得 float idouchi = zengo * 0.15f; //移動値を調整 Vector3 velosity = transform.forward * idouchi; charaRb.MovePosition(jiposi + velosity); }else{ animator.SetBool("Run", false); } //後退 if(zengo < 0){ animator.SetBool("RunBackward", true); var jiposi = transform.position; //自分の位置を取得 float idouchi = zengo * 0.15f; //移動値を調整 Vector3 velosity = transform.forward * idouchi; charaRb.MovePosition(jiposi + velosity); }else{ animator.SetBool("RunBackward", false); } } }
「Any State」から「!Run001」に伸びるTransitionのInspectorで「Can Transition To Self」のチェックを外し、Conditions欄で、「 Run」、「True」の条件を指定します。
今回はRigidbodyの「MovePosition」 を使ってキャラクターを移動させますので、キャラクターにRigidbodyをアタッチします。
Rigidbodyの設定は、「Mass」を「45」、「Freeze Rotation」の全てにチェックを入れておきます。
「Mass」の値は1kg単位なんだよね。
くるりちゃんの体重は45kgなの?
知りません💦
続けますよっ❗
そのため、Colliderを適用する必要があり、今回は「Capsule Collider」を適用します。
「Capsule Collider」の設定は、「Center(Y)」を「0.8」、「Radius」を「0.2」、「Height」を「1.6」としました。
お名前