Unity解説 複数Animator Controllerの切替

キャラクターをジャンプさせる。

 

 

今回は、複数のAnimator Controllerを切り替て、Humanoid3Dキャラクタに動いてもらうよ。

 

 

普通だと、Humanoidのアニメーションを操作する時は、一つのAnimator Controllerに色々設定していくんだけど。。。

 

 

この方法だと、瞬時にアニメーションの切替ができて、

Animator Controllerファイルも一つ一つ独立しているから、、、

 

 

このファイルが適用されていれば、何々の動作ができるって管理がしやすいんだ。

 

 

あまり見ないHumanoidの動かし方ですけど、色々メリットもありそうですね。

 

 

さっそくやってみるね💨

フィールドとHumanoidモデルはあらかじめ用意しているものを使う。

 

 

☑ フィールドとHumanoidモデルの用意

 

 

また、アニメーションファイルのAnimation Clipファイルも用意しておく。

 

 

Animation Clipファイルは、mixamoのアニメーションを使わせてもらう。

 

 

【参考】

 

 

今回は、「待機」と「ジャンプ」のAnimation Clipを用意して、それぞれ「Idle010」と「Jump010」と名付けた。

 

 

☑ Animation Clipの用意

 

 

Animation Clipの設定で、「Bake into Pose」のチェックをいれるところが三つあるから、全てチェックをいれる。

 

 

 

 

これは、アニメーションの再生により3Dキャラクターの角度や座標か変化しないようにしているんですね。

 

 

次に、Assetsファルダ直下に「Resources」フォルダを作って、その下に「Anicon」フォルダを作る。

 

 

そこに、新規にAnimator Controllerを作成して、それぞれ「Idle」と「Jump」と名付けた💨

 

 

 

 

「Resources」のサブフォルダならどこでも、どんな名前でもいいのですが、「Resources」だけは特別で、今後切替ファイルの選択のために、この名前でフォルダを作る必要があります。

 

 

 

 

次に「Idle」のAnimator Controllerを開いて、何もないところで右クリック、「Create State」>「Empty」を押す。

 

 

 

 

 

「New State」が出来上がるので、それを選択して、InspectorのMotion欄で「Idle010」のAnimation Clipを選択する。

 

 

 

 

 

 

「Jump」のControllerも同様に「New State」を作って、「Jump010」のAnimation Clipを選択する。

 

 

 

 

3Dキャラクターの「Controller」に先ほど作った「Idle」を選択して適用する。

 

 

また、「Apply Root Motion」のチェックを外しておく。

 

 

 

 

これでゲームを実行すると待機のポーズをとるようになる。

 

 

 

 

これをスクリプトを使って適用されているControllerを変更するんだ。

 

 

コードは以下のとおり。 このスクリプトは3Dキャラクター自体にアタッチする。

 

 

【HumanoidJump010.cs】

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HumanoidJump010 : MonoBehaviour
{
    private Rigidbody charaRb;
    private Animator animator;
    public bool coroutineFlag = false;
    void Start()
    {
        animator = GetComponent<Animator>();
        charaRb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) 
        {
            animator.runtimeAnimatorController = 
            (RuntimeAnimatorController)RuntimeAnimatorController.Instantiate
            (Resources.Load ("AniCon/Jump"));

            if(coroutineFlag == false)
            {
                StartCoroutine(Action010());
            }
        }
    }

    IEnumerator Action010()
    {
        coroutineFlag = true;
        yield return new WaitForSeconds(0.5f);
        charaRb.AddForce (Vector3.up * 3f, ForceMode.VelocityChange);
        yield return new WaitForSeconds(1.2f);
        animator.runtimeAnimatorController = 
        (RuntimeAnimatorController)RuntimeAnimatorController.Instantiate
        (Resources.Load ("AniCon/Idle"));
        coroutineFlag = false;
    }
}

 

 

今回はAddForceを使っているのでRigidBogyとカプセルコライダーを3Dモデルに適用することが必要。

 

 

 

 

Rigidbodyの設定は、「Mass」を「45」、「Freeze Rotation」の全てにチェックをいれる。

 

 

 

 

 

「Capsule Collider」の設定は、「Center(Y)」を「0.8」、「Radius」を「0.2」、「Height」を「1.6」にする。

 

 

 

 

これで完成。ゲームを実行してみる。 スペースを押すとジャンプするよ。

 

 

 

 

うん✨イイ感じだね!

 

 

 

 

 

 

 

 

お名前


削除キー(必須)

コメント(必須)


サイト内検索

twiter

CONTENTS

 

 

 

くるくるサンプルコード

 

 

 

【↓広告↓】