【Unity】列挙体でAnimationの切り替え

長期放置をしていたプログラムなんですが、
ようやく忙しさが抜けてきたので、
ボチボチではありますが、復帰して行こうと思います。

長い間、いじってなかったんですが、
合間なんかに処理を考えていました。

考えた処理を実際に動かすと上手くいかなかったり、バグったりします。
なので、ブログに挙げる事ができなかったりするので、
まだまだカメ更新となりそうでっす。
(;^o^) \(ToT )あんたほんとにそれでいいの


本題に戻りますが、アクションが増えると
アニメーションの切り替えが増えて困らないでしょうか?

クリップの遷移方法には、int、float、bool、triggerとありますが、
ケロはintを使って、クリップをナンバー化したものを呼び出しています。

ナンバー化と言っても目で見える訳ではないので、
正直、スクリプトを組んでいると、どのクリップが何番?
なんてことが多々あります。

いちいちアニメーターのトランジションを確認しなくてはいけないうえ、
数値を間違えると違うクリップが再生されて、パニくります (T-T) グスッ

少しでも面倒な部分や間違いを回避できるように
処理を考えてみました。

まず、今作ってるアニメーターのステートなんですが、
切り替え①.jpg
アクションが増えるとアニメーターも複雑になります。(;^_^A アセアセ・・・

ステートにナンバーを振ってみましたが、
正直、トランジションを確認しないと、
本当に、このナンバーで合っているのか分かりません。

スクリプトを組みだすと訳が分からなくなります。(ノ_<。)うっうっうっ

そこで、ステートのナンバーをスクリプト内でも固定化して、
呼び出しメソッドを作ります。
Character

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

public class Character : MonoBehaviour
{
private Animator charaAnimator; //アニメーター取得
private const string clip_KEY = "Action"; //アニメーター変数名


//アクションナンバーの設定
private enum actionNum
{
stop=0,
run=1,
jump=2,
fall=3,
sliding=4,
wallAttach=5,
wallJump=6,
}


// Start is called before the first frame update
void Start()
{
charaAnimator = GetComponent<Animator>();
}


//アニメーション切り替え
private void AnimationChange(actionNum num)
{
playerAnimator.SetInteger(clip_KEY, (int)num);
}

stringで設定しているActionは、アニメーター内のint変数です。

列挙体でステート名を設定して、対応するナンバーを格納しておきます。
アニメーションの切り替えメソッドには、列挙体の引数を用意しておけば、
呼び出す際に列挙体のstringが表示されるので、分かりやすくなります。

試しにスクリプトを編集してみます。
切り替え②.jpg
AnimationChangeメソッドを入力するとガイドに引数のactionNumが
表示されるようになります。

actionNum.を入力すると
切り替え③.jpg
列挙体で登録した名前と数値を表示してくれるので確認もできます。
これで、確認やミスの手間が大きく解消されると思います。

もともと、アニメーターのSetIntegerをいちいち書いているのが面倒になって、
作った処理だったのですが、ステートが増えると確認と入力ミスが増えたので、
流用してみました。

使い方としては、呼び出したい所でAnimationChangeを書けば、
ガイドが必要な引数を表示してくれるので、間違える事がないと思います。

ステート名と列挙体名を統一しておけば、
呼び出したい処理を間違える事もなくなると思います。

今回、列挙体に数値を割り当てましたが、
数値を割り当てなければ、文字列としても利用できるので、
Switch文などにも使えます。

余り大した内容ではなかったのですが、
少しでも、ミスや手間が解消できる参考になれば幸いかと思います。

次回からは、アクションの処理の続きが書けるように頑張っていこうと思います。
それでは、( ^ 0 ^ )/~~~~see you again

この記事へのコメント