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」にする。
これで完成。ゲームを実行してみる。 スペースを押すとジャンプするよ。
お名前