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(texture->get_aspect()) 如果你在世界空间绘制图标。

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

最后更新于