読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】AnimatorをAnimationのように使えるよう色々と試行錯誤

Animatorが嫌いなので、Animationのように制御するアプローチを模索してみました。それで出来たのがコレです。

tsubaki/AnimatorAnimation · GitHub

動画ではanimationClipをGUIで登録していますが、Play(AnimationClip clip)でアニメーションクリップを切り替える事も出来ます。AssetBundleやResourcesから引っ張ってきた奴でもOK。

やった事

やっている事は単純です。

まずAnimationControllerを一つ用意します。アニメーションの種類・数に関わらず一つで十分です。AnimationControllerに一つだけAnimationClipを登録します。このデモの場合は名前をAnimationと設定しています。今回の場合、外部にあると気持ち悪いので格納してしまいます。

f:id:tsubaki_t1:20150628224708p:plain

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したから知らないです。