location-dotUI в мировом пространстве

Используйте UI в мировом пространстве, чтобы рисовать текст над головами игроков и любой другой текст, который должен ощущаться как часть игрового мира.

Интерфейс в мировом пространстве рисуется в 2D мире, а не на экране. Используйте его для табличек с именами, полос здоровья, знаков и любого текста, который должен казаться привязанным к игровым объектам.

circle-info

Интерфейс в мировом пространстве использует метры для размера. Если вы используете пиксельные размеры экранного стиля, ваш интерфейс будет огромным.

Основные правила

  • Всегда вызывайте 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});
}

Таблички у базы игрока

Полосы здоровья

Преобразование координат

Советы

  • Держите интерфейс в мире минимальным и читаемым на расстоянии. Если у вас есть масштабируемая камера, убедитесь, что изменяете размер текста при уменьшении масштаба.

  • Используйте fit_aspect() если вы рисуете иконки в мировом пространстве.

  • Если текст мерцает или перекрывается, проверьте значения Z и расстояния между элементами.

Последнее обновление