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」としました。

お名前

