location-dot世界空间 UI

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

世界空间 UI 绘制在 2D 世界中,而不是屏幕上。可将其用于名字牌、生命条、标识,以及任何应该感觉锚定在游戏对象上的文本。

circle-info

世界空间 UI 使用 进行尺寸设置。如果你使用屏幕式像素尺寸,UI 会大得惊人。

核心规则

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

  • 矩形尺寸和偏移请使用米。

  • 为正确的深度排序推入 Z 值(通常使用 pos.y).

  • 使用 子矩形 仅用于百分比填充(如生命条)。

示例

显示玩家等级

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 值和间距。

最后更新于