generated at
Godot3.5 でダメージ数値のフローティングテキストを出す
最初はメッセージウインドウだけでダメージ数値を表示していたが、それだと見ない
基本的にプレイヤーは主人公と敵の位置を見ていて、メッセージウインドウは見ない
ターンベースのコマンドRPGであればメッセージウインドウをずっと見ているだろうが、テンポを良く動くローグライクにしたので視線先が違う

実装
Position2Dノードの子ノードに LabelノードとTweenノードを置く
スクリプトはこちらの実装 (tutorials/FloatingText.gd at master · johnnygossdev/tutorials · GitHub) をベースにし、カスタマイズした
gd
extends Position2D onready var tween = $Tween var velocity = Vector2(50, -100) var gravity = Vector2(0, 1) var mass = 120 var text_scale = Vector2.ONE var text setget set_text, get_text func _ready(): tween.interpolate_property(self, "modulate", Color(modulate.r, modulate.g, modulate.b, modulate.a), Color(modulate.r, modulate.g, modulate.b, 0.0), 0.3, Tween.TRANS_LINEAR, Tween.EASE_OUT, 0.7) tween.interpolate_property(self, "scale", Vector2(0, 0), text_scale, 0.2, Tween.TRANS_QUART, Tween.EASE_OUT) tween.interpolate_property(self, "scale", text_scale, Vector2(0.4, 0.4), 0.6, Tween.TRANS_LINEAR, Tween.EASE_OUT, 0.6) tween.interpolate_callback(self, 0.8, "destroy") tween.start() func _process(delta): velocity += gravity * mass * delta position += velocity * delta func set_text(new_text): $Label.text = str(new_text) func get_text(): return $Label.text func destroy(): queue_free()
フローティングテキストを表示したいタイミングでこのノードを instance() 生成し、text を設定すれば表示される。
gd
func add_player_floating_number(type, value): var playerDamageFloatText = floaty_text.instance() var player = get_player() playerDamageFloatText.velocity = Vector2(rand_range(-4, 4), -70) if type == NumberType.DAMAGE: playerDamageFloatText.modulate = Color.pink elif type == NumberType.RECOVER: playerDamageFloatText.modulate = Color.green playerDamageFloatText.text = value player.add_child(playerDamageFloatText)


参考動画