UI要素の注意喚起やゲーム内通知で役立つラベルの点滅エフェクト。この記事では、Godot 4.4.1で実装できる3つの手法を実用的なコード例とともに紹介します。
最も柔軟性が高く、滑らかなアニメーションを実現。
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
メリット
シンプルで理解しやすい実装。明確なオン・オフ切り替え。
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
メリット
リアルタイム計算による滑らかなフェード効果。
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を基準としています。バージョンによって一部の機能が異なる場合があります。