UI 必须挂在 CanvasLayer 下,否则相机会把血条拖出屏幕。
结构
code
UI CanvasLayer
└─ Hearts HBoxContainer
├─ Heart1 TextureRect
├─ Heart2 TextureRect
└─ Heart3 TextureRect满心、空心两张图。脚本只根据 hp 改 texture。
gdscript
extends HBoxContainer
@export var heart_full: Texture2D
@export var heart_empty: Texture2D
func set_hp(hp: int, max_hp: int) -> void:
for i in get_child_count():
var heart := get_child(i) as TextureRect
heart.texture = heart_full if i < hp else heart_empty玩家受伤时:
gdscript
hp = maxi(hp - 1, 0)
get_tree().get_first_node_in_group("hud").set_hp(hp, max_hp)HUD 加组 hud。
别用进度条凑合
微型游戏三颗心比一条绿条好读。进度条适合耐力、冷却。血量是离散整数,就用离散图标。
把 mouse_filter 设成 Ignore,点游戏世界时不会点到 UI。
