スプライトシートの分割 までは終わった。プロジェクトウィンドウには歩きのコマが並んでいる。——では、これをどうやって 「歩いたら歩きアニメ、止まったら待機アニメ」 として動かすのでしょうか。
Unityの2Dアニメーションは、役割の違う3つの道具の分業で動いています。この記事では、クリップ作成→切り替えルール→スクリプト制御の一連の流れを解説します。
この記事でわかること
- 3つの道具の分業——クリップ(フィルム)・Animator(映写機)・Controller(切替盤)
- Animationウィンドウでスプライトからクリップを作る手順
- Animatorコントローラーで「歩き⇔待機」を自動切り替えする
- スクリプトから
SetFloat/SetBoolで状態を伝える(Unity 6のlinearVelocity対応)- 向きの反転は
Flip X——左向きアニメは作らなくていい
3つの道具の分業

- Animationウィンドウ(編集台): スプライトをタイムラインに並べて、「コマ撮りフィルム」であるアニメーションクリップ(
.anim)を作る場所。 - Animatorコンポーネント(映写機): ゲームオブジェクトに付いて、実際にアニメーションを再生する装置。
- Animatorコントローラー(切替盤): 「どういう条件でどのフィルムに切り替えるか」のルールを定義するステートマシン(
.controller)。
「クリップを作る→切替ルールを組む→スクリプトから状態を伝える」——以降のStepはこの順番どおりです。
Step 1: アニメーションクリップの作成
まず、待機・歩き・ジャンプなどのアクションごとにクリップを作ります。
- 準備:
Sprite Rendererを持つゲームオブジェクトをシーンに配置します(スプライトは 分割済み とします)。 - Animationウィンドウを開く: オブジェクトを選択した状態で
Window > Animation > Animation。 - 最初のクリップを作成:
Createボタンを押すと、Animatorコントローラーと最初のクリップが自動作成され、オブジェクトにAnimatorコンポーネントが付きます。クリップ名は「Idle」などにします。 - スプライトを登録: 使用する分割済みスプライトをまとめて選択し、タイムラインへドラッグ&ドロップ。キーフレームが自動で打たれます。
- 速さの調整: 再生ボタンで確認し、速すぎたら
Samples(1秒あたりのコマ数)を下げるか、キーフレームの間隔を広げます。ドット絵アニメは8〜12fps程度が定番です。

- 他のクリップも作成: クリップ名の部分をクリック →
Create New Clip...で「Walk」「Jump」も同様に作ります。
tips: クリップを選択してInspectorの
Loop Timeを確認しましょう。歩き・待機のような繰り返すアニメはオン、攻撃・ジャンプのような1回きりのアニメはオフです。「攻撃モーションが無限ループする」のはたいていこれです。
Step 2: Animatorコントローラーで状態を管理する
クリップが揃ったら、切り替えルールを組みます。コントローラーアセットをダブルクリックしてAnimatorウィンドウを開くと、クリップに対応するステート(箱)が並んでいます。Entryから矢印が伸びている箱がデフォルト再生(通常はIdle)です。
- パラメータの作成:
Parametersタブの+から、スクリプトとの連絡用の変数を作ります。ここではFloat型のSpeedと、Bool型のIsJumpingを作成します。 - トランジションの作成: 「Idle」を右クリック →
Make Transition→「Walk」をクリックで、Idle→Walkの矢印を作ります。逆方向のWalk→Idleも作ります。 - 条件の設定: 矢印を選択し、Inspectorの
Conditionsで遷移条件を設定します。- Idle→Walk:
SpeedGreater0.1 - Walk→Idle:
SpeedLess0.1
- Idle→Walk:
- Has Exit Timeをオフに: 移動系の切り替えでは
Has Exit Timeのチェックを外します。オンだと「アニメが最後まで再生されてから」切り替わるため、操作に対して反応が一拍遅れます。

ステートマシンの考え方そのもの(Entry・Any State・Blend Treeなど)は Animator Controller入門 で詳しく解説しています。2Dでも3Dでも仕組みは同じです。
Step 3: スクリプトからAnimatorを制御する
最後に、キャラクターの状態をパラメータとしてAnimatorに伝えます。スクリプトは「今の状態」を報告するだけで、どのアニメを再生するか の判断はコントローラーがやってくれます。

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 RendererのFlip Xで反転します。アニメーション制作量が半分になります。
実践:攻撃モーションを割り込ませる
ベルトスクロールのパンチ、剣戟アクションの斬撃、RPGのフィールドで草を刈るモーション——「移動中でもボタンを押した瞬間に1回だけ再生して、終わったら元に戻る」アニメは、Idle⇔Walkとは組み方が少し違います。ここまでの知識に Trigger という道具を1つ足すだけで作れるので、実際に組んでみましょう。

- Attackクリップを作る: Step 1の手順で攻撃コマからクリップを作成し、Inspectorで
Loop Time