(この記事の使用環境: Unity2017.1.0b3 Personal, C#, Windows10

UnityのAnimatorControllerに設定できるパラメーターは Float, Int, Bool, Trigger の4種類ですが、キャラクターのアニメーション遷移を設定するときなどに、どの型を使えばいいか悩みませんか?(自分は毎回悩みます)
たとえば「歩く」と「走る」の切り替えであれば1つのBool型パラメーターをOn/Offするだけで足りますが、「歩く」「走る」「ジャンプ」「攻撃」「被ダメージ」などの組み合わせになると簡単ではありません。

たとえば、それぞれにBool型で「Walk」「Run」「Jump」・・・などとパラメーターを付けてしまうと、「歩く」ときにはスクリプトで「Walk」をtrueにするだけでなく、「Run」「Jump」などをfalseにしてやらないと思い通りの動作にならないことがあります。

そのひとつの解決策として、Bool型ではなくInt型の1つのパラメーターを使用して、0 なら 歩く、10 なら走る、20 ならジャンプする・・・というようにする方法があります。これならば「歩き」と「ジャンプ」が併存してしまうようなことを防げます。
下図はInt型「MotionIndex」でアニメ―ション遷移を設定してみた例です。(Jump、IdleのTrigger型パラメーターがありますが、実際には使用していません)
SnapCrab_NoName_2017-5-6_13-46-37_No-00
SnapCrab_NoName_2017-5-6_14-4-3_No-00

しかしこの場合、それぞれのモーションには int で何番を指定すればよいのか?というのを覚えておかないといけないのが面倒です。
前置きが長くなりましたが、今回の記事の本題はここです。

AnimatorControllerでの遷移設定では番号指定が必要なのには変わりありませんが、スクリプト側ではenum型を利用することで、少し使いやすくなります。
こんな感じ。

まず、enum型で各アニメーションに対応する値を作っておきます。
    protected enum MotionIndex
    {
        Idle = 0,
        Jump = 20,
        //Attack_A = 51,    // 別途Triggerで管理したほうが良さそう
        Damaged = 70,       // 別途Triggerで管理したほうが良さそう
        Dead = 90
    }

次に、アニメーションを変更したい箇所で、enumの値をint型にキャストする形でセットします。
                if (grounded)
                {
                    animator.SetInteger ("MotionIndex", (int)MotionIndex.Jump);

                    //animator.SetTrigger ("Jump");     // 使わない

これだけですが、Int型でアニメーション指定するときのストレスが少し減ると思いませんか?


※追記: int型で管理するのに適しているものと、適していないもの
 int型で管理するのに適しているのは、「次のモーションへの遷移処理がスクリプトに記述されない限りはそのモーションが継続する」ようなもののようです。
攻撃モーションや被ダメージモーション等、そのモーションが終了したら自動的に待機モーションに戻るものについては別途Triggerで管理したほうが分かりやすいかもしれません。
ジャンプモーションはずっと継続するわけではありませんが、スクリプトで接地判定して他のモーションへの遷移させるなら、int型での管理対象に含めて問題なさそうです。
死にモーションも、自動的に他のモーションに遷移しないのであればintで管理して問題なさそうですね。


今回は以上です。


■ 参考文献
enum (C# リファレンス) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/articles/csharp/language-reference/keywords/enum


(管理情報: TEXTBOOK  > Unity2DTetteiGuide