Godot 4.4.1でラベルを点滅させる3つの方法
UI要素の注意喚起やゲーム内通知で役立つラベルの点滅エフェクト。この記事では、Godot 4.4.1で実装できる3つの手法を実用的なコード例とともに紹介します。
この記事で学べること
- Tweenを使った滑らかな点滅アニメーション
- Timerノードによる明確な点滅制御
- プロセス関数を活用したリアルタイム点滅
方法1: Tween使用(推奨)
最も柔軟性が高く、滑らかなアニメーションを実現。
extends Label
func _ready():
start_blinking()
func start_blinking():
var tween = create_tween()
tween.set_loops() # 無限ループ
tween.tween_property(self, "modulate:a", 0.0, 0.5)
tween.tween_property(self, "modulate:a", 1.0, 0.5)
func stop_blinking():
# 点滅停止とアルファ値リセット
var current_tween = get_tree().get_tween()
if current_tween:
current_tween.kill()
modulate.a = 1.0
メリット
- アニメーションカーブによる動きの調整可能
- イージング設定で自然な動作
- パフォーマンス効率が良い
方法2: Timerノード使用
シンプルで理解しやすい実装。明確なオン・オフ切り替え。
extends Label
@onready var blink_timer: Timer = Timer.new()
var is_visible_state: bool = true
func _ready():
add_child(blink_timer)
blink_timer.wait_time = 0.5
blink_timer.timeout.connect(_on_blink_timer_timeout)
start_blinking()
func start_blinking():
blink_timer.start()
func stop_blinking():
blink_timer.stop()
visible = true
func _on_blink_timer_timeout():
is_visible_state = !is_visible_state
visible = is_visible_state
メリット
- 動作が分かりやすい
- デバッグが簡単
- カクカクした点滅表現に適している
方法3: プロセス関数活用
リアルタイム計算による滑らかなフェード効果。
extends Label
@export var blink_speed: float = 2.0
@export var enable_blinking: bool = true
func _process(delta):
if not enable_blinking:
return
var alpha = (sin(Time.get_time() * blink_speed) + 1.0) / 2.0
modulate.a = alpha
func toggle_blinking(enable: bool):
enable_blinking = enable
if not enable:
modulate.a = 1.0
メリット
- 数学的に制御可能
- リアルタイムでの速度調整
- 他のエフェクトと組み合わせやすい
パラメータ調整のポイント
点滅速度の制御
# Tween版
tween.tween_property(self, "modulate:a", 0.0, 0.3) # より早い点滅
# Timer版
blink_timer.wait_time = 0.2 # より早い切り替え
# Process版
blink_speed = 3.0 # より早いフェード
点滅パターンの変更
# 透明度変更(推奨)
modulate.a = target_alpha
# 表示・非表示切り替え
visible = target_visible
# 色の変更
modulate = Color.RED if blinking else Color.WHITE
実用的な使用例
ゲームオーバー表示
extends Label
func show_game_over():
text = "GAME OVER"
start_urgent_blinking()
func start_urgent_blinking():
var tween = create_tween()
tween.set_loops()
tween.tween_property(self, "modulate:a", 0.2, 0.2)
tween.tween_property(self, "modulate:a", 1.0, 0.2)
条件付き点滅制御
func conditional_blink(health: int):
if health <= 20:
start_blinking()
else:
stop_blinking()
パフォーマンス比較
| 方法 | CPU負荷 | メモリ使用量 | 滑らかさ |
|---|---|---|---|
| Tween | 低 | 低 | 高 |
| Timer | 最低 | 最低 | 中 |
| Process | 中 | 低 | 最高 |
トラブルシューティング
よくある問題と解決策
点滅が止まらない
# 確実な停止処理
func force_stop_blinking():
get_tree().call_group("tween", "kill")
modulate.a = 1.0
visible = true
フレームレート低下
# Process版でのFPS配慮
func _process(delta):
if Engine.get_process_frames() % 2 == 0: # 2フレームに1回実行
update_blink_effect()
まとめ
- 汎用性重視: Tween使用がおすすめ
- シンプル実装: Timer版が理解しやすい
- 高度制御: Process版で複雑なエフェクト
目的に応じて適切な手法を選択し、ユーザー体験を向上させましょう。
参考資料
Godot 4.4.1を基準としています。バージョンによって一部の機能が異なる場合があります。