本日は Unity の技術調査枠です。
基本変形(移動・回転・スケール)のアニメーションを作成する方法についてまとめます。
今回は全ての状態から割り込みでアニメーションを切り替える方法です。
前回記事
以下の記事の続きになります。
bluebirdofoz.hatenablog.com
様々なアニメーションに遷移させる
前回作成した State を遷移するアニメーションコントローラの遷移先を増やします。
それぞれ上下左右移動のアニメーションを作成して State に設定を行いました。
合わせてスクリプトを以下の通り修正して、WASDキーに合わせてCubeが移動するようにしました。
using UnityEngine; [RequireComponent(typeof(Animator))] public class MoveTrigger : MonoBehaviour { /// <summary> /// Animatorコンポーネント /// </summary> [SerializeField] private Animator animator; private static readonly int UpTrigger = Animator.StringToHash("UpTrigger"); private static readonly int DownTrigger = Animator.StringToHash("DownTrigger"); private static readonly int RightTrigger = Animator.StringToHash("RightTrigger"); private static readonly int LeftTrigger = Animator.StringToHash("LeftTrigger"); /// <summary> /// 参照の設定 /// </summary> void Reset () { // Animatorコンポーネントの取得 animator = GetComponent<Animator>(); } /// <summary> /// 定期実行 /// </summary> void Update() { // Wキー押下で実行する if (Input.GetKey(KeyCode.W)) { // トリガーを実行する animator.SetTrigger(UpTrigger); } // Sキー押下で実行する if (Input.GetKey(KeyCode.S)) { // トリガーを実行する animator.SetTrigger(DownTrigger); } // Aキー押下で実行する if (Input.GetKey(KeyCode.A)) { // トリガーを実行する animator.SetTrigger(LeftTrigger); } // Dキー押下で実行する if (Input.GetKey(KeyCode.D)) { // トリガーを実行する animator.SetTrigger(RightTrigger); } } }
この状態でシーンを再生して動作確認してみます。
WASDキーの入力に応じてCubeが移動しますが、アニメーションが終了するまで次のアニメーションの割り込みはできません。
これはWaitStateからのみ遷移が設定されているためです。
割り込みでアニメーションを切り替える
アニメーションを割り込ませるには全ての状態で各 State への遷移を設定する必要があります。
このとき、AnyState を利用すると便利です。AnyState はあらゆる状態からの遷移を設定できます。
docs.unity3d.com
以下の通り、各 State への遷移を AnyState からに変更しました。
この状態でシーンを再生して動作確認してみます。
WASDキーの入力に応じてアニメーションが即座に切り替わり、Cubeが移動するようになりました。