はじめに
ゲームキャラクターが歩く、ジャンプする、ダメージを受ける——そうした動作を表現するとき、静止画ではなく複数の画像をぱらぱらめくるように表示したいことがあります。そのために使うのが AnimatedSprite2D ノードです。この記事では、静止画と動画の中間的な存在であるこのノードの使い方を解説します。
AnimatedSprite2Dとは?
AnimatedSprite2D は、複数のスプライト(2D画像)をつなぎ合わせて、フレーム単位で切り替えながら動きを表現するノードです。
パラパラ漫画と同じ仕組み。1枚1枚のイラストを素早く切り替えることで、キャラクターが動いているように見せる。
AnimatedSprite2D は Sprite2D を継承しており、静止画も動画も両方表示できます。ゲームエンジンのアニメーションシステムの基本的な機能を備えているため、複雑なアニメーション管理が必要ないシンプルなゲームではこれだけで十分なことが多いです。
このノードを使うべき場面
- キャラクターの歩きアニメーション、ジャンプアニメーション、攻撃アニメーションを作るとき
- 敵のパターンアニメーション(回転する、点滅するなど)を作るとき
- UI要素の簡単な動き(ボタンのポップアップなど)を演出したいとき
- スプライトシート(複数のフレームを1つの画像に並べたもの)を活用してメモリを効率化したいとき
- フレームレートに依存しない、確実なタイミングでアニメーションを制御したいとき
別のノードが適切な場合:
- 複雑なボーン(骨)ベースのアニメーションが必要な場合 → AnimatedSprite2D では手に負えず、本格的なアニメーションツールが必要
- スプライトではなくモデルベースの3Dキャラクターの場合 → MeshInstance3D や他の3Dノードを使用
主なプロパティと機能
| プロパティ / メソッド | 説明 | 役割 |
|---|---|---|
sprite_frames |
SpriteFrames リソース | アニメーション用フレーム群を管理する |
animation |
現在再生中のアニメーション名(文字列) | どのアニメーションを再生するか指定 |
frame |
現在表示されているフレーム番号 | どのコマを表示するか直接指定できる |
play() |
メソッド | アニメーションの再生を開始 |
stop() |
メソッド | アニメーションを停止(再生位置は保持) |
is_playing() |
メソッド | 現在再生中かどうか確認 |
AnimatedSprite2D を実際に使うコード例です:
extends AnimatedSprite2D
func _ready():
# "walk" というアニメーションを再生する
play("walk")
func _process(delta):
# キー入力で異なるアニメーションに切り替える
if Input.is_action_pressed("ui_right"):
if animation != "walk":
play("walk")
elif Input.is_action_pressed("ui_accept"):
if animation != "jump":
play("jump")
else:
if animation != "idle":
play("idle")
もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
AnimatedSprite2D を細かく制御したいとき、調整することが多いパラメータを紹介します。
1. フレームレート(animation / framecount)
SpriteFrames リソース内で、各アニメーションごとにフレームレート(1秒間に何フレーム表示するか)を設定できます。デフォルトは多くの場合 5~10 fps ですが、これを上げるとアニメーションが速くなり、下げると遅くなります。キャラクターが素早く動くアニメーションなら 12 fps、ゆっくりした動きなら 6 fps といった具合に調整します。
2. ループ設定(loop)
SpriteFrames で各アニメーションを設定するときに「ループするか」を指定できます。ループをオンにすれば、アニメーション終了時に最初に戻ります。ループをオフにすれば、最後のフレームで停止したまま。攻撃アニメーションはループなし、歩きアニメーションはループありといった使い分けができます。
3. モディファイア(offset, scale, rotation)
AnimatedSprite2D も Sprite2D を継承しているため、offset(画像の表示位置をずらす)、scale(大きさ)、rotation(回転角度)を自由に変更できます。これにより、アニメーション再生中にキャラクターの大きさや向きを動的に変えられます。
4. 再生速度(speed_scale)
speed_scale を 0.5 に設定すれば、アニメーションが半分の速さで再生されます。逆に 2.0 なら倍速。スローモーション演出やアニメーション一括高速化が必要なときに便利です。
5. フレーム直接指定(frame プロパティ)
GDScript から frame = 5 のように書けば、その場で特定フレームを表示できます。animation_finished シグナルをキャッチして、アニメーション終了時に特定フレームを強制的に表示させるといった細かい制御が可能です。
6. アニメーション切り替え時の挙動
異なるアニメーションに切り替えるときの細かい制御も可能です。GDScript では animation_finished シグナルに接続して、アニメーション終了時に特定の処理を実行できます。これにより、キャラクターの状態遷移をスムーズに管理できます。
extends AnimatedSprite2D
func _ready():
animation_finished.connect(_on_animation_finished)
play("walk")
func _on_animation_finished():
# アニメーション終了時の処理
print("アニメーション終了:", animation)
if animation == "attack":
play("idle")
まとめ
AnimatedSprite2D は、スプライトをぱらぱら漫画のように切り替えて動きを表現するノードです。シンプルながら強力で、ほとんどの2Dゲーム開発で活躍します。
- 複数フレームを定義して、アニメーション名で管理できる
- play() で再生、stop() で停止、frame で直接コマ指定も可能
- フレームレート、ループ、再生速度など細かい制御ができる
次回は、ゲームキャラクターの移動やジャンプを物理エンジンで制御するための CharacterBody2D を解説します。AnimatedSprite2D とセットで使うことで、動きのあるゲームが作れるようになります。
シリーズ:Godot 4 ノード解説
- 001. ノード解説「Node」
- 002. ノード解説「Node2D」
- 003. ノード解説「Sprite2D」
- 004. ノード解説「AnimatedSprite2D」
- 005. ノード解説「CharacterBody2D」(予定)
- 006. ノード解説「Area2D」(予定)
- 007. ノード解説「RigidBody2D」(予定)
- 008. ノード解説「StaticBody2D」(予定)
この記事はGodot 4.xをもとに執筆しています。


コメント