Skip to content

Latest commit

 

History

History
85 lines (61 loc) · 3.55 KB

File metadata and controls

85 lines (61 loc) · 3.55 KB

スクリプト制御とイベント駆動

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()

Note

シグナル接続画面の画像 (※ここに Godot エディタ右側の「ノード」タブでシグナルを接続している様子の画像が入ります)


動的テクスチャ差し替え (アバターの着せ替え)

ゲーム内でキャラクターの装備を変えたい場合など、特定のパーツ(セルマップ)のテクスチャをプログラムから動的に差し替えることができます。

実装例: 武器の持ち替え

func change_weapon():
    # "weapon_map" というセルマップに対し、新しいテクスチャを適用する
    var new_sword_texture = preload("res://assets/iron_sword.png")
    ss_player.set_cellmap_texture("weapon_map", new_sword_texture)

この機能により、アニメーションデータをパーツごとに何パターンも用意することなく、効率的なアバターシステムを構築できます。

Tip

着せ替えの Before/After 比較画像 (※ここにキャラクターが武器を持ち替えた Before/After の比較画像が入ります)