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」にする。

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


お名前

