かずおの開発ブログ(主にRuby)

日々の開発のことを色々書きます。

Animatorを使わずにAnimation単体で再生する

UnityでそのGameObjectで再生させたいアニメーションが1種類だけ(例えばUIを点滅させるや爆発のアニメーションを起こすなど)のときにいちいちAnimatorをつけているとAnimatorのUpdateで処理が重くなってしまいます。かといってAnimation単体をつけただけではなぜか再生されない。今回はその悩みを解決するAnimation単体でAnimationを再生させる方法をご紹介したいと思います。

今回作るのはこちらです。

youtu.be

Animationのコンポーネントだけでアニメーションが再生出来ているのが分かる化と思います。

アニメーションを作成

まずは適当なアニメーションを作成します。(アニメーションの作成方法について本題とはそれるので割愛します) 今回は"AnimationComponentSingleAnim"という名前で上の動画のようなアニメーションを作成しました。アニメーション作成時に自動的にAnimatorコンポーネントがオブジェクトにくっついてしまいますが、それを削除して図のようにAnimationコンポーネントをアタッチし、作成したアニメーションをAnimationとElement1のところに登録しておきます。f:id:kazuooooo:20150802185925p:plain

  • アニメーションの設定を変更

このままだとAnimatorがないためにAnimationは再生出来ません。そこでAnimationコンポーネント単体でも再生出来るようにアニメーションの設定を変更します。まず、今回作成したアニメーションを選択して右上に小さく表示されている▼三マークをクリックします。そうするとプルダウンが出てくるのでDebugを選択してください。

  • f:id:kazuooooo:20150802190434p:plain
    Debugを選択すると以下のような画面になるのでそこでLegacyというチェックボックスにチェックをつけます

    f:id:kazuooooo:20150802190546p:plain

これで設定は完了です!

スクリプトを作成

続いてアニメーションを再生させるためのスクリプトを作成します。スタートと同時にアニメーションを再生させるシンプルなものです。

gist.github.com

これをAnimationコンポーネントをつけたオブジェクトと同じオブジェクトにアタッチします。

ゲームを再生

ゲーム再生ボタンを押してみましょう。アニメーションが再生されたでしょうか?一度しか再生されない場合はWrapModeをLoopにすることでLoop再生されます。また、今回はスクリプトの書き方を示すために、スクリプトを書いていますが、スタートと同時に再生させたい場合はPlayOnAwakeにチェックをつけることで、再生が可能です。Animatorは結構パフォーマンスのSpikeになっていることが多いのでこの方法は有効かと思います!お試しあれ!