【Unity】Unity 2Dアニメーション入門:AnimatorとAnimationウィンドウでキャラクターを動かす

作成: 2025-12-07最終更新: 2026-07-10

スプライトシートは分割した。では、どうやって「歩き」や「ジャンプ」として動かす?——Animationウィンドウでのクリップ作成、Animatorコントローラーでの切り替え、スクリプト制御まで、2Dキャラクターに命を吹き込む一連の流れを解説します。

スプライトシートの分割 までは終わった。プロジェクトウィンドウには歩きのコマが並んでいる。——では、これをどうやって 「歩いたら歩きアニメ、止まったら待機アニメ」 として動かすのでしょうか。

Unityの2Dアニメーションは、役割の違う3つの道具の分業で動いています。この記事では、クリップ作成→切り替えルール→スクリプト制御の一連の流れを解説します。

2Dアニメーションのイメージ。粘土のキャラクターのコマ画像がフィルムとなり、映写機を通してゲーム画面で動き出す

この記事でわかること

  • 3つの道具の分業——クリップ(フィルム)・Animator(映写機)・Controller(切替盤)
  • Animationウィンドウでスプライトからクリップを作る手順
  • Animatorコントローラーで「歩き⇔待機」を自動切り替えする
  • スクリプトからSetFloat/SetBoolで状態を伝える(Unity 6のlinearVelocity対応
  • 向きの反転はFlip X——左向きアニメは作らなくていい

Sponsored

3つの道具の分業

2Dアニメーションの3要素の図。Animationウィンドウはコマを並べてフィルム(クリップ)を作る編集台、Animatorコンポーネントはフィルムを再生する映写機、Animatorコントローラーはどのフィルムをかけるか決める切替盤として描かれている
  1. Animationウィンドウ(編集台): スプライトをタイムラインに並べて、「コマ撮りフィルム」であるアニメーションクリップ.anim)を作る場所。
  2. Animatorコンポーネント(映写機): ゲームオブジェクトに付いて、実際にアニメーションを再生する装置。
  3. Animatorコントローラー(切替盤): 「どういう条件でどのフィルムに切り替えるか」のルールを定義するステートマシン(.controller)。

「クリップを作る→切替ルールを組む→スクリプトから状態を伝える」——以降のStepはこの順番どおりです。

Step 1: アニメーションクリップの作成

まず、待機・歩き・ジャンプなどのアクションごとにクリップを作ります。

  1. 準備: Sprite Rendererを持つゲームオブジェクトをシーンに配置します(スプライトは 分割済み とします)。
  2. Animationウィンドウを開く: オブジェクトを選択した状態でWindow > Animation > Animation
  3. 最初のクリップを作成: Createボタンを押すと、Animatorコントローラー最初のクリップが自動作成され、オブジェクトにAnimatorコンポーネントが付きます。クリップ名は「Idle」などにします。
  4. スプライトを登録: 使用する分割済みスプライトをまとめて選択し、タイムラインへドラッグ&ドロップ。キーフレームが自動で打たれます。
  5. 速さの調整: 再生ボタンで確認し、速すぎたらSamples(1秒あたりのコマ数)を下げるか、キーフレームの間隔を広げます。ドット絵アニメは8〜12fps程度が定番です。
Animationウィンドウのイメージ図。タイムラインの目盛りの上に歩行ポーズのコマが等間隔に並び、それぞれの位置にひし形のキーフレームが打たれている。速さはSamplesで調整する
  1. 他のクリップも作成: クリップ名の部分をクリック →Create New Clip...で「Walk」「Jump」も同様に作ります。

tips: クリップを選択してInspectorのLoop Timeを確認しましょう。歩き・待機のような繰り返すアニメはオン、攻撃・ジャンプのような1回きりのアニメはオフです。「攻撃モーションが無限ループする」のはたいていこれです。

Step 2: Animatorコントローラーで状態を管理する

クリップが揃ったら、切り替えルールを組みます。コントローラーアセットをダブルクリックしてAnimatorウィンドウを開くと、クリップに対応するステート(箱)が並んでいます。Entryから矢印が伸びている箱がデフォルト再生(通常はIdle)です。

  1. パラメータの作成: Parametersタブの+から、スクリプトとの連絡用の変数を作ります。ここではFloat型のSpeedと、Bool型のIsJumpingを作成します。
  2. トランジションの作成: 「Idle」を右クリック →Make Transition→「Walk」をクリックで、Idle→Walkの矢印を作ります。逆方向のWalk→Idleも作ります。
  3. 条件の設定: 矢印を選択し、InspectorのConditionsで遷移条件を設定します。
    • Idle→Walk: Speed Greater 0.1
    • Walk→Idle: Speed Less 0.1
  4. Has Exit Timeをオフに: 移動系の切り替えではHas Exit Timeのチェックを外します。オンだと「アニメが最後まで再生されてから」切り替わるため、操作に対して反応が一拍遅れます。
Idle⇔Walkのステートマシン図。EntryからIdleに入り、Speedが0.1より大きいとWalkへ、0.1より小さいとIdleへ戻る双方向のトランジション

ステートマシンの考え方そのもの(Entry・Any State・Blend Treeなど)は Animator Controller入門 で詳しく解説しています。2Dでも3Dでも仕組みは同じです。

Sponsored

Step 3: スクリプトからAnimatorを制御する

最後に、キャラクターの状態をパラメータとしてAnimatorに伝えます。スクリプトは「今の状態」を報告するだけで、どのアニメを再生するかの判断はコントローラーがやってくれます。

スクリプトとAnimatorの分業の図。スクリプトがSetFloatでSpeedパラメータに値を渡すと、Controllerが条件を判断してIdleとWalkのどちらを再生するか選ぶ
using UnityEngine;

[RequireComponent(typeof(Animator))]
public class PlayerAnimationController : MonoBehaviour
{
    private Animator animator;
    private Rigidbody2D rb;
    private SpriteRenderer spriteRenderer;

    void Start()
    {
        animator = GetComponent<Animator>();
        rb = GetComponent<Rigidbody2D>();
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        // 水平速度の絶対値をSpeedパラメータへ(歩き⇔待機の切り替えに使われる)
        float speedX = rb.linearVelocity.x;
        animator.SetFloat("Speed", Mathf.Abs(speedX));

        // 空中にいる間だけIsJumpingをtrueに(接地判定と連動させる)
        animator.SetBool("IsJumping", !IsGrounded());

        // 向きの反転はFlip Xで。左向き用のアニメは不要
        if (speedX > 0.01f) spriteRenderer.flipX = false;
        else if (speedX < -0.01f) spriteRenderer.flipX = true;
    }

    private bool IsGrounded()
    {
        // 足元に短いRayを飛ばす定番の接地判定(Groundレイヤーのみに当てる)
        return Physics2D.Raycast(transform.position, Vector2.down, 0.1f,
                                 LayerMask.GetMask("Ground"));
    }
}

ポイントは3つです。

  • linearVelocityを使う: 旧velocityはUnity 6で改名されました(API移行ガイド 参照)。
  • Boolは戻し忘れに注意: IsJumpingをtrueにしたまま放置すると着地してもジャンプアニメのままになります。「接地していない間だけtrue」のように状態と直結させるのが安全です。
  • 向きはflipX: 右向きアニメだけ作り、左移動時はSprite RendererFlip Xで反転します。アニメーション制作量が半分になります。

実践:攻撃モーションを割り込ませる

ベルトスクロールのパンチ、剣戟アクションの斬撃、RPGのフィールドで草を刈るモーション——「移動中でもボタンを押した瞬間に1回だけ再生して、終わったら元に戻る」アニメは、Idle⇔Walkとは組み方が少し違います。ここまでの知識に Trigger という道具を1つ足すだけで作れるので、実際に組んでみましょう。

攻撃モーションの割り込みの流れ。移動中(Walk)にAttackトリガーが発火すると攻撃アニメが割り込み再生され、Has Exit Time ONの戻りトランジションで自動的に元の状態へ復帰する
  1. Attackクリップを作る: Step 1の手順で攻撃コマからクリップを作成し、Inspectorで Loop Timeをオフにします(1回きりの再生)。
  2. Triggerパラメータを作る: ParametersタブでTrigger型のAttackを追加します。Triggerは「押した瞬間だけtrueになり、使われたら自動で戻る」ボタン型のパラメータで、SetBoolのような戻し忘れが起きません
  3. 割り込みの矢印を張る: 「Any State」を右クリック→Make Transition→「Attack」。条件にAttack(Trigger)を設定し、Has Exit Timeオフ(押した瞬間に割り込ませたいため)。Any Stateからにしておくと、Idle中でもWalk中でも同じ矢印1本で割り込めます。
  4. 戻りの矢印を張る: 「Attack」→「Idle」のトランジションを作り、こちらはConditions空のままHas Exit Timeオンにします。「条件なし+Exit Timeオン」=再生し終わったら無条件で戻る、という意味になります。

スクリプト側は1行です。

void Update()
{
    // 押した瞬間に1回だけ発火(Boolと違い、戻し忘れがない)
    if (Input.GetButtonDown("Fire1"))
    {
        animator.SetTrigger("Attack");
    }
}

ポイントは2つです。

  • Has Exit Timeは「行き」と「帰り」で逆にする: 割り込む矢印はオフ(即座に反応)、戻る矢印はオン(最後まで再生してから復帰)。Step 2で「移動系はオフ」と覚えましたが、正確には 「途中で切っていいアニメはオフ、最後まで見せたいアニメはオン」 という使い分けです。
  • 攻撃の「効果」はアニメーションイベントで: 「振り下ろしの3コマ目で当たり判定を出す」「ヒット音を鳴らす」は、クリップの特定フレームに関数呼び出しを仕込むアニメーションイベント(おまけ参照)で連動させます。見た目と判定のタイミングがズレなくなります。

連打対応(コンボ)や「攻撃中は移動を止める」制御まで踏み込むなら、ステート管理そのものを整理する Stateパターンの記事 が次のステップです。

おまけ:先に知っておくと良いこと

  • Any Stateの使いどころ: 「どの状態からでもダメージモーションへ」のような割り込みはAny Stateからのトランジションで作ります(Animator Controller入門 参照)。
  • アニメーションイベント: クリップの特定フレームで関数を呼べます。「足が地面に着いたコマで足音を鳴らす」「攻撃の3コマ目で当たり判定を出す」など、コマ単位の連動に使います。
  • ボーンアニメーション: コマ撮り(フレームアニメ)のほかに、1枚絵をボーンで変形させる2D Animationパッケージ(スケルタルアニメーション)もあります。滑らかな動きと省メモリが利点で、Live2D的な表現に近づきます。
  • 物理との連携: Speedに渡す速度は Rigidbody2D から取るのが基本です。移動処理とアニメ制御を同じ値で駆動すると、見た目と挙動がズレません。

まとめ

  • 3つの分業: Animationウィンドウ(フィルム作り)→Animatorコントローラー(切替盤)→Animatorコンポーネント(映写機)。
  • クリップ作成はドラッグ&ドロップ。速さはSamples、繰り返しはLoop Timeで制御。
  • 切り替えはパラメータ+トランジション条件。移動系はHas Exit Timeオフ。
  • スクリプトは状態を報告するだけSetFloat/SetBoolで伝え、Boolの戻し忘れに注意。
  • 1回きりの割り込みはSetTrigger。戻りは「条件なし+Has Exit Timeオン」で自動復帰。
  • 左向きアニメは作らないFlip Xで反転。

「Idle⇔Walk」の1往復が組めれば、あとはステートとパラメータを足していくだけです。まずは2状態から始めてみてください。