概要
アクションゲームにおいて、プレイヤーが敵に攻撃を当てたときや、逆にダメージを受けたときの「手応え」は、ゲームの爽快感を大きく左右する重要な要素です。その手応えを演出する最もシンプルかつ効果的なテクニックの一つが、キャラクターが一瞬白く光るホワイトフラッシュ です。
Godotでは、このホワイトフラッシュ効果を、シェーダーなどの難しい知識を使わずに、たった1行のコードとTweenノードで驚くほど簡単に実装できます。その鍵となるのがmodulateプロパティです。

modulateプロパティとは?
modulateは、CanvasItemを継承するすべての2Dノード(Sprite2D, Label, ColorRectなど)が持っているプロパティです。このプロパティにColorを設定することで、そのノード(およびそのすべての子ノード)の色合いを乗算で変化させることができます。
modulate = Color(1, 1, 1)(白): 元の色と全く同じ(デフォルト)modulate = Color(1, 0, 0)(赤): 赤色以外の成分が取り除かれ、赤っぽくなるmodulate = Color(0.5, 0.5, 0.5)(グレー): 全体的に暗くなる
そして、このmodulateプロパティの面白い特徴は、色の値を1以上に設定できる ことです。通常、色は0(黒)から1(元の色)の範囲で表現されますが、modulateの値を1以上にすると、スプライトはHDR(ハイダイナミックレンジ)のように輝き始め、白飛び したような表現になります。これを利用するのがホワイトフラッシュです。
modulate = Color(10, 10, 10) のように非常に大きな値を設定すると、スプライトはほぼ真っ白に光ります。
実装方法:Tweenで滑らかに変化させる
ホワイトフラッシュは、「一瞬だけ白くなり、すぐに元に戻る」という動きです。このような時間経過を伴うアニメーションを簡単に実装するために、GodotにはTweenという非常に便利な機能が用意されています。
以下は、ダメージを受けたキャラクター(Sprite2Dを持つノード)にホワイトフラッシュを適用する関数の例です。
# ダメージを受けた時に呼び出す関数
func take_damage():
# ... HPを減らすな どの処理 ...
# ホワイトフラッシュ処理を開始
flash_white()
# ホワイトフラッシュを実行する関数
func flash_white():
# 1. スプライトを一瞬で白くする
$Sprite2D.modulate = Color(10, 10, 10) # 大きな値で白く輝かせる
# 2. Tweenを作成して、元の色に滑らかに戻すアニメーションを作る
var tween = create_tween()
# 0.2秒かけて、$Sprite2DのmodulateプロパティをColor(1, 1, 1)まで変化させる
tween.tween_property($Sprite2D, "modulate", Color(1, 1, 1), 0.2)
コードの解説
-
flash_white関数が呼ばれると、まず$Sprite2D.modulateを非常に大きな値を持つColorに設定します。これにより、スプライトは即座に白く光ります。 -
次に
create_tween()で新しいTweenオブジェクトを作成します。 -
tween.tween_property()がアニメーションの核となる部分です。このメソッドは4つの引数を取ります。- 対象オブジェクト:
$Sprite2D - 対象プロパティ:
"modulate"(文字列で指定) - 最終的な値:
Color(1, 1, 1)(元の色) - 継続時間(秒):
0.2
- 対象オブジェクト:
これにより、「0.2秒かけて$Sprite2Dのmodulateプロパティを白(Color(1,1,1))に戻す」というアニメーションが予約されます。Tweenは自動的に再生され、完了すると自動的に破棄されるため、これだけで実装は完了です。
まとめ
modulateプロパティとTweenを組み合わせることで、プロフェッショナルな見た目のダメージ表現が驚くほど簡単に実装できます。このホワイトフラッシュは、プレイヤーに「攻撃が当たった」という明確なフィードバックを与え、ゲームの爽快感を大きく向上させます。
modulate: 色を変化させる。値を1以上にすると白く光るTween: プロパティを時間経過で滑らかに変化させる
このテクニックは、ダメージ表現だけでなく、アイテムを拾ったときのキラキラした演出や、パワーアップ時のオーラ表現など、様々な場面で応用できます。