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

テラシュールブログ

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

【Unity】MecanimのAnimationClipを動的に差し替える

3D Unity アニメーション

今回はMecanimのAnimationClipを動的に差し替える方法について。

Animationの差し替え

ゲームでアニメーションを使用して制御していると、時々アニメーションを差し替えたくなる事があります。
例えばツボの前ではツボを持ち上げるアニメーションであったり、椅子の前では椅子に座るモーション、ドアの前ではドアを開けるモーションです。
後は、コマンド式RPGのような沢山の技を持つゲームの場合です。コマンドによって、様々な技やエフェクトを展開する事が出来るアレです。

これらをステートマシンで全部登録する事は無理ではありませんが、ロード時間とメモリ的に不利ですし、なによりステートマシンが大変なことになります。

f:id:tsubaki_t1:20161118231120j:plain

AnimationClipを差し替える

ということで、アニメーションクリップを差し替えます。

やることは単純で、ブレンドでステートを切り替える前にAnimationClipを差し替えてやるだけです。

 

今回は簡単に、下のようなステートマシンを作成します。
ここで重要なのはClipの方のステートマシンで、Clipという名前のアニメーションクリップを登録します。Clipのアニメーションは基本的に上書きされるので、中身は無くても良いです。

f:id:tsubaki_t1:20161118232743j:plain

f:id:tsubaki_t1:20161118232805j:plain

 

後はClipにステートを切り替える前にAnimationClipを切り替えてしまいます。コードはこんな感じです。

gist.github.com

これで下のように、Clipのステートで複数のアニメーションを制御出来るようになります。かつ、Mecanimのブレンドも使えます。

f:id:tsubaki_t1:20161118233356g:plain

ミソは、animationclipを差し替えた際にリセットされるステートマシン情報を保持・巻き戻ししてる点と、animatorをupdate(0)で強制的に初期化してる点です。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp