この記事でのバージョン
Unity 2017.4.7f1
はじめに
Unityでアニメーションを再生したい場合、AnimatorControllerを作成してステートマシンを組んで……
みたいなやり方が一般的ですが、これがとにかく面倒くさいです。
ステートマシンなんて使わず、昔のLegacy Animationみたく簡単に使いたい!
今回はそんな時に使えるSimpleAnimationというUnity公式から提供されているシステムの紹介です。
イメージとしては以下のような感じ。
また、本記事に出てくる女の子のアセットは以下のものを使っています。
Sensei | 3D Humanoids | Unity Asset Store |
導入
導入はいたって簡単、以下からSimpleAnimationを入手して、
SimpleAnimationComponentというフォルダごと、プロジェクトに入れるだけ。
ただ、そのままの状態だとビルドした時にテスト周りでエラーがでるので、
error CS0234: The type or namespace name `TestTools' does not exist in the namespace `UnityEngine'. Are you missing an assembly reference? error CS0246: The type or namespace name `NUnit' could not be found. Are you missing an assembly reference?
テストしない、またはテストが何か分からない場合はTestsというディレクトリを削除します。
テストを使いたい場合は、Window -> Test RunnerからPlayModeを有効にします。
使い方
使い方も簡単で、ただアニメーションを再生するだけなら
SimpleAnimationをAddし、Play Automaticallyにチェックを入れ、
Animationに再生したいAnimationClipを設定するだけ。
なお、Animator Controllerは設定する必要がありません。
アニメーションを切り替えたい場合はあらかじめAnimationsに登録しておく必要があります。
左がそのアニメーションのState名で、右がAnimationClipです。
もちろんプログラムから追加する事も可能です。
//_animationClip : AnimationClip, stateName : string
_simpleAnimation.AddState(_animationClip, stateName);
アニメーションの切り替えにはCrossFadeを使います。
引数に切り替えたいアニメのState名と、切り替えにかかる(フェードする)時間を設定します。
//0.2秒かけてAngryのアニメに切り替える _simpleAnimation.CrossFade("Angry", 0.2f);
また、CrossFadeQueuedを使えば前のアニメーションが終わった後に切り替えるという事も可能です。
なお、「アニメーション終了時に処理をしたい(コールバックを設定したい)」
みたいな時は以下の記事を参照の事。
SimpleAnimationChanger
SimpleAnimationを使って、簡単にアニメーションを切り替えるSimpleAnimationChanger
というものも作ったので、ついでご紹介します。
なお、実際のゲームで使うというものではなく、キャラやアニメの確認用です。
使い方はAddし、InspectorからSimpleAnimationを設定するだけ。
エディタの再生を開始すると、
Animationsに最初から登録されているアニメのボタンが出現し、切り替えられるようになります。
また、Animation Clipの欄を切り替えるとそのアニメーションをすぐに再生する事も出来ます。
SimpleAnimation、シンプルで最高だ……!#Unity pic.twitter.com/azJhMsmG8n
— カン@Game Creator(Unity/VR/Switch/Steam) (@Kan_Kikuchi) 2018年7月18日