location-dot世界空间 UI

使用世界空间 UI 在玩家头顶绘制文本以及任何应感觉像是游戏世界一部分的文本。

世界空间 UI 在二维世界中绘制,而不是在屏幕上。用于名牌、血条、标志以及任何应该感觉锚定到游戏对象的文本。

circle-info

世界空间 UI 使用 作为尺寸单位。如果你使用屏幕风格的像素尺寸,你的 UI 将会非常巨大。

核心规则

  • 始终调用 UI.push_world_draw_context()defer UI.pop_draw_context().

  • 在矩形尺寸和偏移量上使用米作为单位。

  • 推送 Z 以获得正确的深度排序(通常使用 pos.y).

  • 使用 subrect 仅用于百分比填充(比如血条)。

示例

显示玩家等级

draw_player_level :: proc(player: Player) {
    UI.push_world_draw_context();
    defer UI.pop_draw_context();

    pos := player.world_position;
    UI.push_z(pos.y);
    defer UI.pop_z();

    ts := UI.default_text_settings();
    ts.size = 0.30; // 世界空间文本大小
    ts.halign = .CENTER;
    ts.valign = .CENTER;

    text_pos := pos + v2{0, 1.7};
    rect := Rect{text_pos, text_pos}->grow(0.05, 0.4, 0.05, 0.4);
    UI.text(rect, ts, "Lvl %", {player.level});
}

玩家基地标牌

血条

坐标转换

提示

  • 保持世界 UI 简洁并在远处可读。如果你的相机可缩放,确保在缩小视角时调整文本大小。

  • 使用 fit_aspect() 如果你在世界空间中绘制图标时使用。

  • 如果文本闪烁或重叠,请检查你的 Z 值和间距。

最后更新于