Maemaemae

Godot 4.4.1でラベルを点滅させる3つの方法

UI要素の注意喚起やゲーム内通知で役立つラベルの点滅エフェクト。この記事では、Godot 4.4.1で実装できる3つの手法を実用的なコード例とともに紹介します。

この記事で学べること

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

まとめ

目的に応じて適切な手法を選択し、ユーザー体験を向上させましょう。

参考資料


Godot 4.4.1を基準としています。バージョンによって一部の機能が異なる場合があります。

GodotGDScriptUIアニメーションラベル