CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【Unity】AnimatorControllerの使い方
こんにちは!Unityでゲーム開発をしていると、キャラクターにアニメーションを設定するのは必須ですよね。
Unityにはアニメーションを管理する機能として便利なAnimatorControllerがあります。
本記事ではそのAnimatorControllerの使い方について解説していきます!
Animatorの使い方
Unityには、3Dモデルにアニメーションをつける機能としてAnimatorControllerが用意されています。
AnimatorControllerを利用することで、複数のアニメーションを組み合わせたり切り替えることができます。
ここではそのAnimatorの使い方を解説していきます。
今回はアニメーションを設定するキャラクターとして、アセットストアから手に入るUnity-Chanの3Dモデルを利用します。
以下のリンクから無料でダウンロードすることができます。
Animatorを作成する
まずはAnimatorControllerを作成しましょう。
project内で右クリック→Create→AnimatorControllerを選択します。
このように「New Animator Controller」という名前で作成されます。
AnimatorControllerをダブルクリックすると、下のようなAnimatorの編集画面が表示されます。
このAnimator画面から、アニメーションを組み合わせたり、アニメーションが切り替わる条件を設定することができます。
Animatorの設定方法
まずは、新しいStateを追加しましょう。
各Stateにはアニメーションが設定でき、Stateが切り替わる度にそのStateのアニメーションが再生される仕組みになっています。
Animator内で右クリック→Create State→Emptyから新しいStateが作成できます。
次に新しく作ったStateにアニメーションを設定しましょう。
Stateをダブルクリックしインスペクターを開きます。
Motionの項目を開き、設定したいアニメーションを選択します。
今回はUnity-Chanに含まれているジャンプモーションを選択しました。
これでAnimatorControllerの設定ができました。
Animatorの編集画面を閉じて、キャラクターのインスペクターを開きましょう。
下のように、AnimatorControllerをAnimator内のControllerの項目にドラッグアンドドロップします。
ここまでできたらプログラムを実行してみましょう。
Unity-Chanにアニメーションが適用されていますね。
現状の設定ではアニメーションの再生は一度で終わってしまいます。
アニメーションをループさせたい場合は、以下の記事で解説していますので参考にしてください。
BoolとTriggerとは
アニメーションは、歩いているときと走っているときとでは当然モーションを変えたいですよね。
そのためには、例えばrunningという変数を用意しておき、それがtrueなら走る、falseなら歩くアニメーションという風に切り替えることになります。
そこで役に立つのがBoolやTriggerです。
例としてBoolを設定してみましょう。
新たにStateを作成し、Stateの名前を対応するアニメーションの名前に変更しておきます。
上のAnimatorの設定だと、下のような動作になります。
Runのアニメーションに切り替わる条件が入っていないため、ずっとWalkの動作を繰り返します。
そこで、WalkからRunのアニメーションへ切り替わる条件を追加してあげましょう。
Walkの上で右クリック→Make Transitionをクリックし、Runへと矢印を繋ぎます。
次に、切り替わる条件となる変数を追加しましょう。
Parametersタブを開き+ボタン→Boolを選択します。
runningと名前をつけておきます。
チェックボックスにチェックが入っているとtrue、入っていないとfalseを表しています。
次に、WalkからRunに伸びている矢印をクリックし、インスペクターを開きましょう。
インスペクター内の一番下にあるConditionsの+ボタンをクリックします。
running:trueとなっていれば設定完了です。
runningがtrueになった時にこの矢印の切り替えを実行し、アニメーションがWalkからRunに移行することを意味します。
ここまで設定できたらプログラムを実行してみましょう。
最初は歩きのアニメーションから始まりますが、runningにチェックを入れると走るアニメーションに切り替わるようになりました。
ちなみに上のアニメーションでは、runningにチェックを入れてもすぐに切り替わるのではなく、Walkのモーションが完了してから切り替わっていますね。
アニメーションの終了を待たずに即座に切り替えたければ、WalkからRunに伸びている矢印のインスペクター内、HasExitTimeのチェックを外しましょう。
これで下のように即座に切り替わるようになります。
今回はBoolを利用しましたがTriggerを使っても同じ様な使い方ができます。
Triggerは一度実行するとチェックが自動で外れるという特徴があるため、攻撃モーションのような一度だけ再生したいアニメーションに向いています。
Layerでできること
AnimatorにはLayersというタブがあります。
レイヤーを使えば、一部のボーンだけに他のアニメーションをさせたり、2つのアニメーションを同時に行うような処理が可能になります。
レイヤーについて詳しい設定方法は下の記事が参考になります。
CullingModeとは
AnimatorにはCullingModeという設定項目があります。
これはカメラに映っていないときにアニメーションをさせるかどうかの設定項目です。
基本的には常にアニメーションを行うAlways Animateで問題ありませんが、負荷が気になるときには他の設定項目を試してみるといいでしょう。
スクリプトからAnimatorを取得する
スクリプトからAnimatorを取得する方法を紹介します。
以下のようなコードをキャラクターに設定することでAnimatorが取得できます。
Animator animator;
void Start()
{
animator = GetComponent<Animator>();
}
PlayとStopの使い方
Animatorを取得すると、PlayやStopを使ってAnimatorをスクリプトから操作することができます。
Playでは、任意のタイミングで指定したアニメーションを再生することができます。
animator.Play(“Stateの名前”);
Stopでは、実行するとアニメーションの再生をただちに止めることができます。
animator.Stop();
Animatorの終了判定する方法
アニメーションが終了するのを待ってから次のイベントを起こしたい、といった場合があるかと思います。
そんなときはAnimatorの終了判定を受け取る必要があります。
これはアニメーションイベントという機能を使えば実現できます。
アニメーションイベントを利用した終了判定の方法については、下の記事が参考になります。
おすすめアセット
UMotion Pro – Animation Editor
UMotion Proは3Dモデルのキャラクターに自分でアニメーションをつけることができるアセットです。
特にHumanoid型のキャラクターのアニメーションを編集するのに非常に便利です。
レイヤーを利用して既存のアニメーションを調整することもできます。
Text Animator for Unity
Text Animatorは、Unity内のテキストにアニメーションを付けたり、エフェクトを加えたりすることができるアセットです。
一文字ずつ表示したり、文字を揺らしたりなどのエフェクトが簡単に実装できます。
日本語でも利用できるので、リッチなテキストの表現を実装したい方におすすめです。
まとめ
以上、AnimatorControllerの使い方について解説してきました。
アニメーションの設定は慣れるまで少し難しいですが、必ず必要になってきますのでぜひ覚えておきたいですね!