Godot の GDScript を使って SpriteStudioPlayer2D を制御する方法を解説します。
Godot の設計思想(ノードとシグナル)に沿った直感的な API が提供されており、ゲームロジックへの組み込みが非常に容易です。
インスペクタでの操作と同様に、スクリプトからもシンプルなメソッド呼び出しでアニメーションを制御できます。
extends Node2D
@onready var ss_player = $SpriteStudioPlayer2D
func _ready():
# アニメーション名を指定
ss_player.set_animation("attack")
# 再生開始
ss_player.play()
func _process(delta):
# スペースキーで一時停止 / 再開
if Input.is_action_just_pressed("ui_accept"):
if ss_player.is_playing():
ss_player.pause()
else:
ss_player.play()Godot ユーザーにとって最も強力な機能の一つが「シグナル (Signals)」を用いたイベント連携です。
SpriteStudioPlayer2D は再生状態の変更やユーザーデータに応じて便利なシグナルを発行します。
animation_changed(anim_name): アニメーションが切り替わった時animation_started(anim_name): アニメーションの再生が開始された時animation_finished(anim_name): アニメーションの再生が終了した時(非ループ時)animation_looped(anim_name): アニメーションがループして先頭に戻った時user_data(payload): アニメーションに設定されたユーザーデータ(イベント)のフレームに到達した時
「攻撃」アニメーションが終了したら、自動的に「待機」アニメーションへ遷移させる実装例です。
func _ready():
# エディタのUI(ノードタブ)から接続することも可能ですが、コードで接続する場合は以下のように書きます。
ss_player.animation_finished.connect(_on_animation_finished)
func _on_animation_finished(anim_name: String):
if anim_name == "attack":
# 攻撃が終わったら待機状態に戻る
ss_player.set_animation("idle")
ss_player.play()SpriteStudio 上で設定したユーザーデータ(足音の再生、攻撃判定の発生など)を受け取り、ゲーム側で処理を行う実装例です。
func _ready():
# ユーザーデータシグナルの接続
ss_player.user_data.connect(_on_user_data)
func _on_user_data(payload):
# payload は Dictionary。設定されたキーのみ含まれる(string / integer / point / rect)
# 例: 文字列(string)を判定して処理
if payload.get("string") == "play_footstep":
$AudioStreamPlayer.play()
elif payload.get("string") == "attack_hit":
# 整数値(integer)を使ってダメージ量などを渡す例
var damage = payload.get("integer", 0)
spawn_hitbox(damage)ゲーム内でキャラクターの装備を変えたい場合など、特定のパーツ(セルマップ)のテクスチャをプログラムから動的に差し替えることができます。
func change_costume():
# セルマップ名は SpriteStudio で定義された名前(get_cellmap_names() で取得、インスペクタの CellMap Overrides に表示)を指定する
var new_costume_texture = preload("res://assets/sailor_uniform.png")
ss_player.set_cellmap_texture("Clothes 1", new_costume_texture)この機能により、アニメーションデータをパーツごとに何パターンも用意することなく、効率的なアバターシステムを構築できます。