location-dotUI en espacio mundial

Usa la UI en espacio mundial para dibujar texto sobre las cabezas de los jugadores y cualquier otro texto que deba sentirse como parte del propio mundo del juego.

La IU en espacio mundial se dibuja en el mundo 2D en lugar de en la pantalla. Úsala para placas de nombre, barras de salud, letreros y cualquier texto que deba sentirse anclado a objetos del juego.

circle-info

La IU en espacio mundial usa metros para el tamaño. Si usas tamaños en píxeles estilo pantalla, tu IU será enorme.

Reglas básicas

  • Siempre llama UI.push_world_draw_context() y defer UI.pop_draw_context().

  • Usa metros para los tamaños de rectángulos y desplazamientos.

  • Empuja Z para un orden de profundidad correcto (comúnmente usa pos.y).

  • Usa subrect solo para rellenos porcentuales (como barras de salud).

Ejemplos

Mostrando el nivel de un jugador

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; // Tamaño de texto en espacio mundial
    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});
}

Letreros de la base del jugador

Barras de salud

Conversión de coordenadas

Consejos

  • Mantén la IU en el mundo mínima y legible a distancia. Si tienes una cámara con zoom, asegúrate de ajustar el tamaño del texto cuando alejes la vista.

  • Usa fit_aspect(texture->get_aspect()) si dibujas iconos en espacio mundial.

  • Si el texto parpadea o se superpone, revisa tus valores de Z y el espaciado.

Última actualización