【Unity初心者向け】Animator基礎編① | Animatorとは? IdleとWalkを切り替える
Unityでキャラクターを動かしていると「止まっているときは待機アニメーション」「移動しているときは歩くアニメーション」のように、状況に応じてアニメーションを切り替えたくなります。
Unityでは、このような複数のアニメーションを管理し、条件に応じて切り替える仕組みとして Animator を利用できます。
今回から全5回で、Animatorの基本を確認していきます。
Animator 基礎編【全5回】
Animatorとは? ― IdleとWalkを切り替える
Parameterの使い方 ― Bool / Float / Int / Trigger
TriggerとAny State ― 攻撃アニメーションを作る
Transitionを理解する ― Has Exit Time / Duration
Animation Event ― アニメーションから処理を呼び出す
第1回では、Animatorの全体的な仕組みを確認しながら、Idle(待機)とWalk(歩行)のアニメーションを切り替えるところまで作ってみましょう。
Animatorとは?
キャラクターには、ゲーム中の状態に合わせてさまざまなアニメーションが必要になります。
たとえば、
Idle:待機
Walk:歩く
Run:走る
Jump:ジャンプ
Attack:攻撃
などです。
アニメーションが1つだけなら簡単ですが、実際のゲームでは、
「移動していなければ Idle」
「移動したら Walk」
「攻撃ボタンを押したら Attack」
というように、状況によって再生するアニメーションを切り替える必要があります。
こうしたアニメーションの状態と切り替えを管理する仕組みが Animator です。

Animation ClipとAnimatorの違い
Animatorを理解するときに、最初に整理しておきたいのが Animation Clip との違いです。
Animation Clipは、実際の動きが記録されたアニメーションデータです。
たとえば、
Idle.anim
Walk.anim
Attack.animなどがあります。

一方、Animatorはこれら複数のAnimation Clipを管理して、「今はどのアニメーションを再生するのか」を管理する役割です。

ざっくり言えば、
Animation Clip = 実際の動き
Animator = 動きを切り替える仕組み
と考えると分かりやすいでしょう。

Animator Controllerを作成しよう
Animatorでアニメーションを管理するときには、Animator Controller を使用します。
Projectウィンドウで右クリックして、
Create → Animation → Animator Controller を選択します。
今回は、PlayerAnimator という名前にしておきます。
作成したAnimator Controllerをダブルクリックすると、Animatorウィンドウが開きます。

AnimatorウィンドウとState
Animatorウィンドウでは、アニメーションを四角い箱のような形で配置して管理します。
この1つ1つの箱を State(ステート) と呼びます。
たとえば、
Idle
Walkという2つのStateがあれば、
「現在Idleなのか」
「現在Walkなのか」
という状態をAnimatorが管理できます。
今回は、あらかじめ用意したIdleとWalkのAnimation ClipをAnimatorウィンドウへドラッグ&ドロップしてみましょう。
すると、それぞれがStateとして登録されます。

Default Stateとは?
Animatorウィンドウを見ると、Stateの中にオレンジ色になっているものがあります。
これは Default State と呼ばれ、ゲーム開始時に最初に再生されるStateです。
今回は、キャラクターが最初は停止している想定なので、IdleをDefault Stateにしておきます。
Idle以外がDefault Stateになっている場合は、Idleを右クリックして、
Set as Layer Default Stateを選択します。

Animatorコンポーネントを確認しよう
Animator Controllerを作成しただけでは、まだキャラクターには反映されません。
実際にキャラクターなどのGameObjectでAnimator Controllerを使用するために必要なのが、Animatorコンポーネントです。
GameObjectを選択してInspectorを見ると、Animatorコンポーネントにはいくつかの項目があります。

今回は、その中でも基本となる項目だけ確認しておきましょう。
Controller
使用するAnimator Controllerを設定します。
今回は、先ほど作成した PlayerAnimator をControllerへ設定します。
これによって「このGameObjectはPlayerAnimatorを使ってアニメーションを管理する」という関係ができあがります。
Avatar
主に3Dキャラクターの骨格(ボーン)を扱うときに使用します。
Humanoidタイプの3Dキャラクターでは重要ですが、今回のような2Dアニメーションでは基本的に使用しません。
Apply Root Motion
アニメーション自体に含まれている移動を、GameObjectの移動へ反映するための設定です。
こちらも主に3Dキャラクターで使うことが多い項目です。
今回はOFFのままで問題ありません。
最初のうちは、AnimatorコンポーネントのControllerに、使用するAnimator Controllerを設定するという点を覚えておけば大丈夫です。

Stateを切り替えるTransition
IdleとWalkを配置しただけでは、まだ2つのStateはつながっていません。
Stateから別のStateへ移動するために使うのが、Transition(トランジション) です。
Idleを右クリックして「Make Transition」を選択し、Walkをクリックします。
これで、
Idle → WalkというTransitionが作成されます。
同じように、
Walk → Idleも作成しておきます。
これでIdleとWalkを行き来できるようになりました。

StateとTransitionの関係
ここまでの内容を整理すると、
Stateは「現在の状態」
Transitionは「別の状態へ移るための道」
と考えることができます。
たとえば、
Idle → Walkなら「待機状態から歩行状態へ移動する」という意味になります。

いつアニメーションを切り替える?
Transitionを作っただけでは「いつIdleからWalkへ切り替えるのか」という条件がまだありません。
そこで使用するのが Parameter(パラメーター) です。
Parameterは、Animatorがアニメーションを切り替える条件として利用できる値です。
Animatorでは、次の4種類のParameterを使用できます。

今回は、この中から Bool を使用します。
Parameterの種類や使い分けについては、次回の記事で詳しく確認します。
パラメーターを作成しよう
AnimatorウィンドウのParametersタブから、+ → Bool を選択します。
名前は、isWalking としておきます。
Boolは「true」「 false」の2つの値を持つことができます。
今回は、
false = 止まっている
true = 歩いている
という意味で使用します。

IdleからWalkへ切り替える条件を設定
次に、Idle → Walk のTransitionをクリックします。
Inspectorの Conditions へ、isWalking を追加し、条件を「true」にします。

これで、
isWalking が true になったら Idle から Walk へ切り替える、という設定になります。
同じように、Walk → Idle のTransition の Conditions には、isWalking を追加、条件を「 false」に設定します。

これで、
isWalking = false → Idle
isWalking = true → Walk
という仕組みが完成します。
スクリプトからAnimatorを操作しよう
Animator側の準備ができたので、次はスクリプトからisWalkingを変更します。
今回は、左右キーが押されているときにWalk、何も押されていないときにIdleへ切り替えてみます。
public class PlayerAnimatorController : MonoBehaviour
{
Animator animator; // Animatorコンポーネントを格納する変数
void Awake()
{
animator = GetComponent<Animator>(); // Animatorコンポーネントを取得
}
void Update()
{
float x = Input.GetAxisRaw("Horizontal"); // 水平方向の入力を取得
if (x != 0) // 入力がある場合、
{
animator.SetBool("isWalking", true); // 歩行アニメーションを再生
}
else //入力がない場合、
{
animator.SetBool("isWalking", false); // 歩行アニメーションを停止
}
}
}Animator.SetBool()
今回のポイントになるのが、
animator.SetBool("isWalking", true);です。
SetBool()を使うと、Animatorに作成したBool型の Parameter の値をスクリプトから変更できます。
基本的な書き方は、
animator.SetBool("Parameter名", 値);です。
今回なら、
animator.SetBool("isWalking", true);とすると、isWalking = true になります。
Animator側では、isWalking = true が Idle → Walk の条件として設定されているため、Walkへ切り替わります。
反対に、
animator.SetBool("isWalking", false);とするとIdleへ戻ります。

移動しているかを調べるコード
今回のスクリプトでは、
float x = Input.GetAxisRaw("Horizontal");を使って左右の入力を取得しています。
左右キーを押した場合は、
左:-1
入力なし:0
右:1という値になります。そこで、
if (x != 0)とすることで、左右どちらかへ移動しようとしているかを確認しています。
入力がある場合、つまり if (x != 0) が成立するとき
animator.SetBool("isWalking", true);入力がない場合は、つまり else の場合
animator.SetBool("isWalking", false);としています。

もっと短く書く方法
今回の処理は、
if (x != 0)
{
animator.SetBool("isWalking", true);
}
else
{
animator.SetBool("isWalking", false);
}
と書きました。
しかし、
x != 0の結果そのものがtrueまたはfalseになるため、次のように1行で書くこともできます。
animator.SetBool("isWalking", x != 0);最初は if文で書いたほうが仕組みを理解しやすいので、慣れてきたらこうした書き方も使ってみるとよいでしょう。
再生して確認しよう
Unityを再生して、左右キーを押してみます。
何も押していないときは、Idle
左右キーを押しているときは、Walk
へ、それぞれ切り替われば成功です。
Animatorウィンドウを開いたまま再生すると、現在再生されているStateが確認できます。
今回はサンプルで Ninj Splete Sheet の素材をお借りしています。

Animatorの基本的な流れを整理しよう
今回作った仕組みを整理すると、次のようになります。
Animation Clipを用意する
Animator ControllerへStateとして登録する
TransitionでState同士をつなぐ
Parameterに切り替え条件を作る
スクリプトからParameterを変更する
Animatorが条件に応じてStateを切り替える
Animatorを使うときは、スクリプトからAnimation Clipを直接切り替えるというよりも、スクリプトからParameterを変更し、どのStateを再生するかはAnimatorに任せるという考え方が基本になります。

今回のまとめ
今回は、Animatorの基本的な仕組みと、Idle・Walkを切り替える方法を確認しました。

次回は「Parameterの使い方」
今回は、Bool ParameterのisWalkingを使ってIdleとWalkを切り替えました。
Animatorで使用できるParameterはBoolだけではありません。
次回は、
Float
Int
Bool
Trigger
の4種類について、それぞれ何が違い、どんな場面で使い分けるのかを詳しく確認していきます。
こちらはUnity初心者向けの記事をテーマ別にまとめています。
▼ Unity初心者向け記事まとめはこちら
こちらのマガジン「ミニゲーム作成講座 全8回セット」でもシーンの切り替えなどを活用して、初心者でも知識ゼロから作れるミニゲーム作成講座を紹介しています。

さらにステップアップの「スマホで遊ぶジャンプゲーム 8回セット」のマガジンもぜひご活用ください。

ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!