ロバメモ - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

アニメーションを切り替える

コントローラーを切り替えることで、アニメーションを変える方法をメモ。
たぶん王道なやり方ではないと思う。
本来なら、一つのコントローラーでアニメーションをTriggerで切り替えるのが正解と思われるけど、やってみたら手順がウザ〜だったので、 コントローラーは無駄に増えるけど、スクリプトで切り替える方法にした。

やりたいこと

モンスターの向きに合わせてスプライトアニメーションを変更したい

関連記事

robamemo.hatenablog.com

用意するもの

関連記事を参考に、各方向のアニメーションとコントローラーを用意する。
f:id:nico-taniku:20170706105835p:plain:w200
ちなみに、B=正面 R=右向き L=左向き T=背面 です。

↓こんな感じで、それぞれ動作を設定しておく。
f:id:nico-taniku:20170706105905p:plain:w500

Animatorを設定する

対象のオブジェクトのAnimatorに適当なコントローラーとスプライトを設定しておく。
f:id:nico-taniku:20170706110732p:plain:w200

コントローラー配列を作る

Animator.RuntimeAnimatorControllerにコントローラーを設定することで切り替える。
そのために、コントローラーを保管する入れるを作る。

[SerializeField]RuntimeAnimatorController[] controller;

f:id:nico-taniku:20170706112820p:plain:w300

コントローラーを切り替える

Animator.RuntimeAnimatorControllerを使うので、まずはAnimatorを取得しておく。
そして、条件に応じて適宜、切り替えを行う。

string course;
Animator animator;

void Start ()
{
    course = "R";
    animator = this.GetComponent<Animator> ();
}

void Update ()
{
    if (course == "T") {
        animator.runtimeAnimatorController = controller [2];
    } else if (course == "R") {
        animator.runtimeAnimatorController = controller [1];
    } else if (course == "B") {
        animator.runtimeAnimatorController = controller [0];
    } else if (course == "L") {
        animator.runtimeAnimatorController = controller [3];
    }
}

これで、courseの値が変わるとアニメーションが切り替わるようになる。
courseの値は、当たり判定で切り替えを行うが、ここでは割愛。

まとめ

コントローラーを切り替えするには、Animator.RuntimeAnimatorControllerを使う。

docs.unity3d.com