見出し画像

【Unity初心者向け】Animator基礎編① | Animatorとは? IdleとWalkを切り替える

Unityでキャラクターを動かしていると「止まっているときは待機アニメーション」「移動しているときは歩くアニメーション」のように、状況に応じてアニメーションを切り替えたくなります。

Unityでは、このような複数のアニメーションを管理し、条件に応じて切り替える仕組みとして Animator を利用できます。

今回から全5回で、Animatorの基本を確認していきます。

Animator 基礎編【全5回】

  1. Animatorとは? ― IdleとWalkを切り替える

  2. Parameterの使い方 ― Bool / Float / Int / Trigger

  3. TriggerとAny State ― 攻撃アニメーションを作る

  4. Transitionを理解する ― Has Exit Time / Duration

  5. 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の基本的な流れを整理しよう

今回作った仕組みを整理すると、次のようになります。

  1. Animation Clipを用意する

  2. Animator ControllerへStateとして登録する

  3. TransitionでState同士をつなぐ

  4. Parameterに切り替え条件を作る

  5. スクリプトからParameterを変更する

  6. 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の個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

いいなと思ったら応援しよう!

ファイブボックス よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!