概要:なぜAnimationPlayerの「高度な活用」が必要なのか
Godot Engineにおける AnimationPlayer ノードは、単なるキャラクターの移動やスプライトのアニメーションを超えた、ゲーム内のあらゆる要素を時間軸に沿って制御するための強力なツールです。初心者の方は、主にノードのプロパテ ィ(位置、回転、スケールなど)をアニメーションさせるためにこれを使用します。しかし、AnimationPlayerの真価は、トラック、キーフレーム、そして コールバック といった高度な機能を使いこなすことで発揮されます。
本記事では、AnimationPlayerを「単なるアニメーション再生機」から「ゲームロジックと同期する強力なシーケンサー」へと進化させるための、初心者から中級者向けのテクニックを解説します。
1. AnimationPlayerを支える「トラック」の種類と役割
AnimationPlayerは、アニメーションの対象となるプロパティや動作の種類に応じて、複数の トラック を使い分けます。
プロパティ・トラック (Property Track)
最も基本的なトラックで、ノードのプロパティ(position、modulate、カスタム変数など)の値を時間とともに変化させます。
メソッドコール・トラック (Method Call Track)
これが本記事の核となる機能の一つです。アニメーションの特定のタイミングで、任意のノードの任意の関数(メソッド)を呼び出すことができます。
活用例:
- キャラクターが剣を振り下ろした瞬間に、攻撃判定を有効にする関数を呼び出す。
- 足が地面に着いた瞬間に、足音のSEを再生する関数を呼び出す。
- カットシーンの途中で、UIの表示を切り替える。
オーディオ・トラック (Audio Track)
アニメーションの特定の時間に合わせて、AudioStreamPlayerノードの再生を開始・停止できます。
2. キーフレームの高度な操作と補間(Interpolation)
キーフレーム は、トラック上の特定の時間におけるプロパティの「目標値」を定義する点です。これらのキーフレーム間の値の変化をどのように計算するかを決定するのが 補間(Interpolation) モードです。
補間モードの選択
| 補間モード | 特徴 | 主な用途 |
|---|---|---|
| Nearest (ニアレスト) | キーフレームの値が次のキーフレームまで保持される。変化は瞬間的。 | スプライトのフレーム切り替え、ブール値の切り替え |
| Linear (リニア) | キーフレーム間で値が一定の速度で直線的に変化する。 | 一定速度の移動、フェードイン/アウト |
| Cubic (キュービック) | キーフレーム間で値が滑らかに変化する。速度が徐々に変化する。 | カメラの動き、滑らかなUIアニメーション |
3. 実践!コールバック(Method Call Track)の活用
ここでは、メソッドコール・トラックを使った実践的なコールバックの実装方法を解説します。
実装例:攻撃アニメーションと判定の同期
# character.gd
extends CharacterBody2D
var is_attacking = false
# アニメーションから呼び出される関数
func enable_hitbox():
is_attacking = true
print("攻撃判定を有効化しまし た!")
# アニメーションから呼び出される関数
func disable_hitbox():
is_attacking = false
print("攻撃判定を無効化しました。")
func _physics_process(delta):
# is_attackingがtrueの場合にのみ、衝突判定ロジックを実行
if is_attacking:
pass # 実際の衝突判定処理
AnimationPlayerの攻撃アニメーションに メソッドコール・トラック を追加し、適切なタイミングでenable_hitboxとdisable_hitboxを呼び出すようキーフレームを設定します。
4. スクリプトからのAnimationPlayer制御とシグナル
AnimationPlayerの再生制御は、スクリプトから行うのが一般的です。
基本的な制御メソッド
| メソッド | 説明 |
|---|---|
play(name) | 指定した名前のアニメーションを再生します。 |
stop() | 現在再生中のアニメーションを停止します。 |
seek(time, update) | アニメーションを指定した時間(秒)にジャンプさせます。 |
queue(name) | 現在のアニメーションが終了した後、指定したアニメーションを再生待ちリストに追加します。 |
シグナルを活用した外部コールバック
AnimationPlayerは、アニメーションの再生に関する重要なイベントをシグナルとして発信します 。
animation_finished(anim_name): アニメーションが最後まで再生されたときに発生します。animation_started(anim_name): アニメーションが再生を開始したときに発生します。
# character.gd (続き)
func _ready():
var anim_player = $AnimationPlayer
anim_player.animation_finished.connect(_on_animation_finished)
func _on_animation_finished(anim_name):
if anim_name == "attack":
print("攻撃アニメーションが終了しました。")
$AnimationPlayer.play("idle")
まとめ
Godot Engineの AnimationPlayer は、単なるビジュアル表現のツールではなく、メソッドコール・トラック を介した強力なゲームロジックのシーケンサーとして機能します。
- トラック: プロパティ変更だけでなく、メソッド呼び出しやオーディオ再生など、多様なイベントを時間軸に沿って管理します。
- キーフレームと補間:
Cubic補間やベジェ曲線を利用することで、滑らかで表現豊かな動きを実現します。 - コールバック(メソッドコール・トラック): アニメーションの特定の瞬間にゲームロジックを正確に同期させ、複雑なインタラクションをシンプルに実装する鍵となります。
これらの高度な機能を活用することで、あなたのゲームはより洗練され、プレイヤーに没入感のある体験を提供できるようになるでしょう。