テラシュールブログ

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

【Unity】さよならステートマシン。旧AnimationっぽいAPIでアニメーションを再生する SimpleAnimation

f:id:tsubaki_t1:20171114113727j:plain

今回はステートマシンを使用せずAnimatorでアニメーションを再生する、Simple Animationについてです。

ステートマシンにサヨナラを

Unity 4辺りから登場した多機能アニメーション再生機能 Mecanimですが、多くの場合「ステートマシンで制御する」という非常に面倒くさい制御機構を持つせいで、多くの手間がかかってきました。

f:id:tsubaki_t1:20171114114214j:plain

例えばアニメーションにキャンセルが組み込まれると、スパゲティのごとく複雑なステートマシンを(しかもグラフィカルに!)組まなければならず…

例えばアニメーションを動的に追加したいようなケースでは、非常に面倒なお作法が存在し…

例えば普通にステートマシンを管理する場合も、大抵の場合はスクリプト側とステートマシン側で二重にパラメータを管理し…

例えば…例えば…例えば…

tsubakit1.hateblo.jp

そして最終的には多くのプロジェクトで、ステートマシンで管理せずアニメーションクリップ一覧だけ持ってFadeでジャンプするという。

f:id:tsubaki_t1:20171114113806j:plain

という感じで、制御機構に重大な問題を持っていたMecanimサンよりも、問題はあるにしても制御が簡単なレガシーAnimationコンポーネントを未だに採用している人はかなり多かった訳です。

Playable API

色々面倒くさいMecanimでしたが、Playable APIにてアニメーション再生の為の低レベルAPIにアクセスが可能になり、それを単品で処理する事が可能になりました。

tsubakit1.hateblo.jp

これでアニメーションコントローラーを使用せずアニメーションを単体で再生可能になった訳です。

自分もそれを色々とコネコネして、Animation Controllerを使用せずアニメーションを再生する簡単なコンポーネントを作ったりもしました。

tsubakit1.hateblo.jp

Unity公式の旧Animationを模したアニメーション再生コンポーネント

で、最近、旧Animationコンポーネントを模したアニメーション再生コンポーネントが、Unity公式Githubオープンソースで登場しました。

github.com

Animationと同じようなインターフェースで、ステートマシン無しにアニメーションが再生できます。

f:id:tsubaki_t1:20171113225653j:plain

 

アニメーション切替も超絶シンプル

またアニメーションの切替もAnimationと同じようなインターフェースで、ステートマシン無しにアニメーションが切替出来ます。

その際には、アニメーションには別途別名を設定して、そちらを使用して切り替えます。

gist.github.comf:id:tsubaki_t1:20171113225811j:plain

AnimatorのOptimised Game Objectも使える

SImpleAnimationはAnimator上で動作しているので、Mecanimで多少良い機能であるリターゲット(Humanoidなら大体使いまわせるアレ)や、Optimize Game Objectは使えます。少ないGameObjectで再生したり、着せ替えたりが便利です。ラグドール使えないけど。

f:id:tsubaki_t1:20171113230651j:plain

AnimationControllerとの共存は?

AnimatorにAnimationControllerをセットした状態でSimpleAnimationを使用すると、SimpleAnimationが優先されました。

これは運によるかもしれませんが、どちらも使う…という感じの事は無理なようです。

もしAnimationControllerで既に動作しているキャラクターにアニメーションを流し込みたいといった場合には、Timelineを使うのが良いかもしれません。

 

どちらにしろ

これで2Dでステートマシン制御という、無意味な縛りが無くなりました。

AnimationControllerにステートマシンを置いて遷移を書かない…みたいな、色々な意味で勿体無い実装ともオサラバです。

ヤッタネ!

f:id:tsubaki_t1:20171113233256g:plain