2DでもBlendTreeを使うと便利だという話


BlendTreeとは

  • UnityのAnimatorの機能

  • アニメーションを移行する際、パラメーターをブレンドして滑らかに移行してくれる

    • 歩きモーションから段々走りモーションに変わる、みたいな

    • 詳しくは他の解説記事を見たほうがいい

  • というのは3Dの話

  • 2Dグラフィックだと画像を直接差し替えるからブレンドするパラメーターがそもそもない

2DでBlendTreeを使わない場合

  • とはいえ、通常のTransitionだけで各種アニメーションを繋ぐのは結構大変

  • 立ちモーションと歩きモーションの場合

    • 歩きと立ちのモーションが正面、左右、後ろの4つずつ、計8こ

    • それぞれ行き来させるとかなりごちゃっとする

    • 走りモーションを追加したらさらにごちゃっとする

まるで蜘蛛の巣

2DでBlendTreeを使う場合

  • まずはキャラクターの向きを設定

    • 向きは0=正面、1=左向き、2=後ろ、3=右向き、という感じでID扱いにする

    • まだアニメーションではなく、続けてBlendTreeを繋ぐ

BlendTreeにBlendTreeを繋げられるのも便利
  • 次に移動速度を設定

    • RigidBodyの速度を入れてもいいし、向きと同じでID扱いでもいい

    • 速度に合わせたアニメーションを設定

  • これで向き+速度のパラメーターに合わせて自動でアニメーションが移行する

    • それぞれTransitionを設定する必要がない

合計16個のアニメーションを設定したけどTransitionの設定はしなくていい

BlendTreeだけどブレンドはさせないほうがいい

  • 便利なのはあくまでパラメーターごとの移行

  • ブレンドさせると表示が荒ぶる可能性がある

    • 2D ArrayのIndex値でアニメーションさせてたら荒ぶった

  • パラメーターには整数だけを使用したほうがいい

    • Automate Thresholdsを無効化して各Thresholdに整数を設定

    • スクリプト側でMathf.RoundToInt()とかさせて整数に揃える

整数にしとけばブレンドされない

いいなと思ったら応援しよう!