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

- Animationウィンドウ(編集台): スプライトをタイムラインに並べて、「コマ撮りフィルム」であるアニメーションクリップ(
.anim)を作る場所。 - Animatorコンポーネント(映写機): ゲームオブジェクトに付いて、実際にアニメーションを再生する装置。
- Animatorコントローラー(切替盤): 「どういう条件でどのフィルムに切り替えるか」のルールを定義するステートマシン(
.controller)。
「クリップを作る→切替ルールを組む→スクリプトから状態を伝える」——以降のStepはこの順番どおりです。
Step 1: アニメーションクリップの作成
まず、待機・歩き・ジャンプなどのアクションごとにクリップを作ります。
- 準備:
Sprite Rendererを持つゲームオブジェクトをシーンに配置します(スプライトは 分割済み とします)。 - Animationウィンドウを開く: オブジェクトを選択した状態で
Window > Animation > Animation。 - 最初のクリップを作成:
Createボタンを押すと、Animatorコントローラーと最初のクリップが自動作成され、オブジェクトにAnimatorコンポーネントが付きます。クリップ名は「Idle」などにします。 - スプライトを登録: 使用する分割済みスプライトをまとめて選択し、タイムラインへドラッグ&ドロップ。キーフレームが自動で打たれます。
- 速さの調整: 再生ボタンで確認し、速すぎたら
Samples(1秒あたりのコマ数)を下げるか、キーフレームの間隔を広げます(Samplesの欄は最初は隠れていて、Animationウィンドウ右上の︙メニューの Show Sample Rate で表示されます)。ドット絵アニメは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のチェックを外します。オンだと「アニメが最後まで再生されてから」切り替わるため、操作に対して反応が一拍遅れます。あわせて Settings の Transition Duration を0にします。スプライトのアニメは2つの絵が混ざらないので、遷移の時間はただの遅れになります。

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

using UnityEngine;
[RequireComponent(typeof(Animator), typeof(Rigidbody2D), typeof(SpriteRenderer))]
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レイヤーのみに当てる)
// スプライトのPivotを足元(Bottom)にしている前提。中心なら、足元までの距離を足す
return Physics2D.Raycast(transform.position, Vector2.down, 0.1f,
LayerMask.GetMask("Ground"));
}
}
ポイントは3つです。
linearVelocityを使う: Unity 6ではvelocityがlinearVelocityに置き換わりました。古いvelocityは非推奨の警告が出ます(API移行ガイド 参照)。- Boolは戻し忘れに注意:
IsJumpingをtrueにしたまま放置すると着地してもジャンプアニメのままになります。「接地していない間だけtrue」のように状態と直結させるのが安全です。 - 向きは
flipX: 右向きアニメだけ作り、左移動時はSprite RendererのFlip Xで反転します。アニメーション制作量が半分になります。
実践:攻撃モーションを割り込ませる
ベルトスクロールのパンチ、剣戟アクションの斬撃、RPGのフィールドで草を刈るモーション——「移動中でもボタンを押した瞬間に1回だけ再生して、終わったら元に戻る」アニメは、Idle⇔Walkとは組み方が少し違います。ここまでの知識に Trigger という道具を1つ足すだけで作れるので、実際に組んでみましょう。

- Attackクリップを作る: Step 1の 手順で攻撃コマからクリップを作成し、Inspectorで
Loop Timeをオフにします(1回きりの再生)。 - Triggerパラメータを作る:
ParametersタブでTrigger型のAttackを追加します。Triggerは「押した瞬間だけtrueになり、使われたら自動で戻る」ボタン型のパラメータで、SetBoolのような戻し忘れが起きません。 - 割り込みの矢印を張る: 「Any State」を右クリック→
Make Transition→「Attack」。条件にAttack(Trigger)を設定し、Has Exit Timeはオフ(押した瞬間に割り込ませたいため)。Any Stateからにしておくと、Idle中でもWalk中でも同じ矢印1本で割り込めます。 - 戻りの矢印を張る: 「Attack」→「Idle」のトランジションを作り、こちらは
Conditionsを空のまま、Has Exit Timeをオン、Exit Timeを1にします。「条件なし+Has Exit Timeオン+Exit Time 1」=最後まで再生したら無条件で戻る、という意味になります(Exit Timeは秒ではなく、クリップの長さに対する割合で、1が最後です)。
スクリプト側は1行です。
void Update()
{
// 押した瞬間に1回だけ発火(Boolと違い、戻し忘れがない)
if (Input.GetButtonDown("Fire1"))
{
animator.SetTrigger("Attack");
}
}
Input.GetButtonDownは旧Input Managerの書き方です。Unity 6 の新しいプロジェクトで例外が出るときは、Project Settings > Player の Active Input Handling を Both にします(エディタの 再起動が要ります)。
ポイントは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オン+Exit Time 1」で自動復帰。 - 左向きアニメは作らない。
Flip Xで反転。
「Idle⇔Walk」の1往復が組めれば、あとはステートとパラメータを足していくだけです。まずは2状態から始めてみてください。