Unity Humanoidモデル操作1

 

 

 

 

 

 

今回は、UnityのInputmanager機能を用いたHumanoidの3Dキャラクターを操作するスクリプトを作成しようと思います。

 

 

 

コントローラーやキーボードで3Dキャラクターを操作できるようにするんだね💨

 

 

 

 

はい✨

まずは、3Dキャラクターが移動する方向を定めるため、3Dキャラクターを旋回されるスクリプトを作ってみます。これには「Transform.RotateAroundメソッド」を使用します。

 

 

 

 

 

 

Transform.RotateAroundメソッドは、指定した中心点を軸にオブジェクトを回転させることができます。

 

 

 

引数は何を指定するの?

 

 

 

Transform.RotateAroundメソッドの引数は、第一引数から順に中心点、軸、回転角度となります。

 

 

 

 

Humanoidを旋回させるコードのサンプルを以下のように作りました。

 

 

 

 

【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);
        }
    }
}

 

 

 

 

「Vector3.up」って、どういう意味だっけ?

 

 

 

「Vector3.up」は、「Vector3(0, 1, 0)」 と同じ意味ですね。

 

 

 

 

このスクリプトを3Dモデルにアタッチすれば、とりあえずは左右に旋回するようになりますが、モーションの設定ができていないので、ポーズは変わらずに、旋回するだけになっています。

 

 

 

 

 

 

そのため、次はモーションの設定をしていきます。

 

 

 

 

今回必要となるAnimation Clip(.animファイル)は、adobeのmixamoからダウンロードし、Animation Clip(.animファイル)を取り出して使わせていただきました。

 

 

 

 

adobeIDがあれば無料で使えるんだよね。

 

 

 

mixamo

https://www.mixamo.com

 

 

 

 

今回は、mixamoから「待機」、「左旋回」、「右旋回」、「走る」、「逆走」のAnimation Clipファイルを取得し、管理しやすいように任意の名前を付けました。

 

 

 

 

 

 

用意した全てのAnimation ClipのInspector画面で、「Loop Time」にチェックを入れておく必要があります。

 

 

こうしないと、アニメーションが一回で終わっちゃうんだよね。

 

 

 

はい、走るなどの動作は繰り返すのでループさせる必要があって、逆にジャンプとかの動作は繰り返さないようにしないといけませんので、個別に判断する必要がありますね。

 

 

 

 

 

 

Animation Clipが用意できましたら、次は、新しいanimator Controllerを作成します。

 

 

 

今回は、HumanoidController001という名前にしました✨

 

 

 

 

 

 

これをHumanoidモデルのControllerに適用しておきます。 また、ここで「Apply Root Motion」のチェックを外しておきます。

 

 

 

 

 

 

何で「Apply Root Motion」のチェックを外すの?

 

 

「Apply Root Motion」が有効ですと、キャラクターのモーションが移動に影響を与えてしまうからです。

 

 

 

今回は、スクリプトのみでキャラクターの移動を制御したいので、チェックを外し、無効にしました。

 

 

 

 

次に、新しいStateを作成し、Motionを先ほど用意した待機のAnimation Clip(Idle050)を選択します。

 

 

 

 

 

 

 

この状態で、ゲームを実行すると3Dモデルがすぐに待機のポーズをとるようになります。

 

 

 

 

 

 

それでは、引き続きanimator Controllerを作成していきます✨

 

 

 

新しいStateを作成し、右旋回のアニメーションを適用して、Make Transitionで往復に繋ぎます。 Stateの名前は「!RightTurn001」としました。

 

 

 

 

 

 

同様に左旋回用のStateも作成し、同様の設定を行います。ここでは、「!LeftTurn001」というStateの名前にしました。

 

 

 

 

 

次にパラメータの作成をします。今回はBool型の「TurnRight」と「TurnLeft」、「Run」、「RunBackward」の4つのパラメータを作成します。

 

 

 

 

 

 

まず、今回作成した4つのTransitionの「Has Exit Time」 のチェックを外します。

 

 

 

 

 

何で、「Has Exit Time」のチェックを外すの?

 

 

 

 

「Has Exit Time」が有効になっていますと、直前のAnimatorのモーションに影響され、即座にモーションが始められないから、今回は無効にしました。

 

 

 

 

【Unity公式マニュアル アニメーション遷移】

https://docs.unity3d.com/ja/560/Manual/class-Transition.html

 

 

次にアニメーションの遷移条件を設定していきます。

 

 

 

「!RightTurn001」のStateへ遷移するTransitionのConditonの「+」マークをクリックして、「TurnRight」、「true」を設定します。

 

 

 

 

 

 

逆に「!RightTurn001」から出ていく遷移をするTransitionには、「TurnRight」、「false」を設定します。

 

 

 

 

 

 

 

「!LeftTurn001」のTransitionについても同様の設定を行います。

 

 

 

 

 

 

 

 

 

 

設定できましたら、ゲームを実行して、キーボードの「a」、「d」押下で、Humanoidモデルを旋回させることができるようになっています。

 

 

 

 

おー、左右を見まわしている!

 

 

 

 

 

 

 

はい、それでは次は走るモーションができるようにしていきます。

サンプルスクリプトは以下のとおりです。

 

 

【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);
        }
    }
}

 

 

新しいStateの「!Run001」と「!RunBack001」を作成し、「Any State」と「Exit」に一方行にTransitionを繋ぎます。

 

 

 

 

 

 

四つのTransitionの「Has Exit Time」は前回と同様にチェックを外し、無効にしておきます。

 

 

 

 

 

「!Run001」と「!RunBack001」のMotionには、あらかじめ用意した走るAnimation Clipを適用しておきます。

 

 

 

 

 

 

 

 

「Any State」から「!Run001」に伸びるTransitionのInspectorで「Can Transition To Self」のチェックを外し、Conditions欄で、「 Run」、「True」の条件を指定します。

 

 

 

 

 

 

 

 

同様に「Any State」から「!RunBack001」に伸びるTransitionのInspectorで「Can Transition To Self」のチェックを外し、Conditions欄で、「 RunBackward」、「True」の条件を指定します。

 

 

 

 

 

 

 

 

 

 

 

「!Run001」から「Exit」に伸びるTransitionのConditions欄には、「Run」、「false」を指定します。

 

 

 

 

 

 

次も同様に「!RunBack001」から「Exit」に伸びるTransitionのConditions欄には、「RunBackward」、「false」を指定します。

 

 

 

 

 

 

 

 

 

 

 

 

今回はRigidbodyの「MovePosition」 を使ってキャラクターを移動させますので、キャラクターにRigidbodyをアタッチします。

 

 

 

 

Rigidbodyの設定は、「Mass」を「45」、「Freeze Rotation」の全てにチェックを入れておきます。

 

 

 

 

 

 

「Mass」の値は1kg単位なんだよね。

くるりちゃんの体重は45kgなの?

 

 

 

 

知りません💦

続けますよっ❗

 

 

 

 

 

 

Rigidbodyを設定した場合、重力が適用されますので、床をすり抜けてしいます。

 

 

 

 

そのため、Colliderを適用する必要があり、今回は「Capsule Collider」を適用します。

 

 

「Capsule Collider」の設定は、「Center(Y)」を「0.8」、「Radius」を「0.2」、「Height」を「1.6」としました。

 

 

 

 

 

 

 

これで一旦は、完成です✨前後左右に自由に動かせる操作ができるようになりました。

 

 

 

もっと、いろいろな動きができるようにしていきたいね💨

 

 

 

 

 

 

 

 

お名前


削除キー(必須)

コメント(必須)


サイト内検索

twiter

CONTENTS

 

 

 

くるくるサンプルコード

 

 

 

【↓広告↓】