Animatorが嫌いなので、Animationのように制御するアプローチを模索してみました。それで出来たのがコレです。
tsubaki/AnimatorAnimation · GitHub
正直2D Animationの設定はこのくらいの手軽さで良いと思う pic.twitter.com/tgldbILD4X
— 椿 (@tsubaki_t1) 2015, 6月 28
動画ではanimationClipをGUIで登録していますが、Play(AnimationClip clip)でアニメーションクリップを切り替える事も出来ます。AssetBundleやResourcesから引っ張ってきた奴でもOK。
やった事
やっている事は単純です。
まずAnimationControllerを一つ用意します。アニメーションの種類・数に関わらず一つで十分です。AnimationControllerに一つだけAnimationClipを登録します。このデモの場合は名前をAnimationと設定しています。今回の場合、外部にあると気持ち悪いので格納してしまいます。
UnityのAnimatorControllerにAnimationClipを内蔵する - テラシュールブログ
あとは各スプライト毎にOverrideAnimationControllerを作成し、ゲームの実行中にアニメーションをオーバーライドしてやれば、AnimationClipを指定するだけでAnimationを切り替える事のできるAnimatorが作成出来るって寸法です。
但しOverrideAnimatorControllerを実行時に生成するのもアレなので、AnimationClipを上書きする処理以外は全部エディタ側で事前に計算しておきます。
エディター操作で登録するのが面倒なボタンのクリックイベントを、スクリプトで登録する - テラシュールブログ
これでAssetbundleやResourcesからAnimationClipを取得しOverrideAnimatorControllerへブチ込むだけで、アニメーションを再生出来ます。
問題
2Dなら問題無いのですが、Animationの中間補完が出来ません。またアニメーション切り替えのコストがAnimatorのTransitionより高いです。
なので現状最も良いAnimatorの使い方は、想定Animationの数だけ事前にClipを用意しておいて、OverrideAnimatorControllerで上書きして、AnimatorのCrossfadeやPlayで切り替えるのが良いんじゃないかなーって気がしています。って、これ普通のAnimatorの使い方だうごご
ステートマシン?AnimatorごとHideInnspectorしたから知らないです。