For the complete documentation index, see llms.txt. This page is also available as Markdown.

UI en espacio mundial

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

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

La UI de espacio mundial usa metros para el tamaño. Si usas tamaños en puntos del espacio de pantalla, tu UI será enorme.

Reglas básicas

  • Dibuja la UI del jugador en espacio mundial desde ese jugador ao_late_update bajo is_local_or_server().

  • Para la UI anclada a una entidad en movimiento, llama a UI.begin_world_space_ui(entity) y y aplaza UI.end_world_space_ui() para que la interpolación de renderizado siga a esa entidad.

  • Usa UI.push_world_draw_context() solo para el dibujo mundial no anclado.

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

  • Empuja Z para un ordenamiento de profundidad correcto (normalmente 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.begin_world_space_ui(player.entity);
    defer UI.end_world_space_ui();

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

    ts := UI.default_text_settings();
    ts.size = 0.30; // Tamaño del 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});
}

Señales de base del jugador

Barras de salud

Barras de progreso

World_Progress_Bar proporciona una barra estándar en espacio mundial:

Las conversiones mantienen la división en coma flotante, y el denominador acotado evita la división por cero.

Para una barra personalizada cuyo relleno cambia con el tiempo, conserva una Float_Interpolation_Helper por barra:

Flechas del tutorial

La sobrecarga de entidad incluye el desplazamiento de interpolación del objetivo:

Para una posición propiedad de un script que se mueve, almacena una Position_Interpolation_Helper y pasa su desplazamiento:

Después de colocar una entidad instantáneamente en una nueva posición, llama a entity.mark_teleported() para que la interpolación no difumine entre la posición antigua y la nueva.

Conversión de coordenadas

Consejos

  • Mantén la UI del 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 el zoom.

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

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

Última actualización