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

Navmesh y colisión

Las navmeshes definen el espacio caminable para la búsqueda de rutas y las restricciones de movimiento.

Las mallas de navegación definen las áreas transitables en tu mundo. Úsalas para:

  • Ajustar los objetos generados al terreno alcanzable

  • Restringir a los jugadores/NPCs a regiones transitables

Los colliders también se pueden usar para recortar mallas de navegación en el editor.

Componentes (resumen rápido)

  • Malla de navegación: la malla de navegación generada que consultas y reconstruyes

  • Navmesh_Loop: bucles poligonales que definen los límites transitables (y los huecos)

  • Colliders: Box_Collider, Circle_Collider, Edge_Collider, Polygon_Collider

Para movimiento/búsqueda de ruta (Movement_Agent) consulta Agentes de movimiento/NPCs.

Referencia de la API de Navmesh

Navmesh :: class : Component {
    // Proyecta un punto sobre esta malla de navegación.
    // triangle_hint es una pista de aceleración que puedes reutilizar para consultas cercanas.
    try_find_closest_point_on_navmesh :: method(
        to_point: v2,
        result: ref v2,
        triangle_hint: ref s64
    ) -> bool;

    // Lanza un rayo a través de la malla de navegación. Devuelve el punto final y si la consulta tuvo éxito.
    try_raycast :: method(position: v2, direction: v2) -> (v2, bool);

    // Poner en cola una reconstrucción para la actualización normal de la malla de navegación.
    mark_for_rebuild :: method();

    // Reconstruye ahora cuando una consulta en el mismo frame necesita la nueva geometría.
    rebuild_immediately :: method() -> bool;

    // Incluye solo los colliders de esta entidad y sus descendientes.
    child_colliders_only: bool;

    // Detecta cambios de entrada y reconstruye automáticamente.
    enable_automatic_rebuilds: bool;
}

Configuración en el editor (crear una malla de navegación)

  1. Crea una entidad y añade un Malla de navegación componente.

  2. Crea entidades hijas con Navmesh_Loop componentes para definir polígonos transitables.

  3. Para cada Navmesh_Loop:

    • Añade puntos para definir la forma del bucle

    • Ordena los puntos del contorno exterior en sentido antihorario

    • Para invertir un bucle existente, haz clic derecho en el Navmesh_Loop encabezado del componente y selecciona Invertir el orden de giro

    • Alternar Invertir interior/exterior para crear un agujero/obstáculo en lugar de espacio transitable

  4. Usa las opciones de depuración de la malla de navegación en el inspector para visualizar los triángulos.

De forma predeterminada, un Navmesh_Loop define un área transitable. Inviértelo para "perforar agujeros" (islas no transitables) en una malla de navegación existente.

Colliders y bucles de malla de navegación

Los colliders también pueden aportar bucles mediante opciones del inspector del collider (por ejemplo "Make Navmesh Loop" / "Flip Navmesh Loop").

Advertencias importantes:

  • Con Habilitar reconstrucciones automáticas, las mallas de navegación detectan cambios en la entrada de bucles, colliders, tilemaps y mallas de navegación hijas y ponen en cola una reconstrucción.

  • Activa Solo colisionadores hijos para ignorar colisionadores no relacionados en otras partes de la escena.

  • Con las reconstrucciones automáticas desactivadas, llama a mark_for_rebuild() después de cambiar una entrada.

  • Llama a rebuild_immediately() solo antes de una consulta en el mismo frame que requiera la geometría modificada.

Generación sobre la malla de navegación (ajustar al terreno alcanzable)

Usa try_find_closest_point_on_navmesh para proyectar una posición deseada sobre el punto válido más cercano de una malla de navegación:

Reutiliza triangle_hint para consultas repetidas en la misma zona (generadores de botín, oleadas, etc.). Puede acelerar significativamente la proyección.

Reconstrucción inmediata de mallas de navegación

La mayoría de los cambios de geometría se detectan automáticamente. Usa esto solo cuando necesites forzar el momento:

  • rebuild_immediately(): reconstruye ahora (úsalo solo si debes consultar la malla actualizada en el mismo frame)

Las mallas de navegación padre se actualizan después de las hijas, así que las mallas padre ensambladas incorporan automáticamente los cambios de entrada de las mallas hijas.

Lanzamiento de rayos a través de una malla de navegación

try_raycast sigue la dirección hasta el límite de la malla de navegación. El segundo resultado indica si la consulta tuvo éxito.

Disparadores de colisionador

Un colisionador con is_trigger == true puede informar cuando otro colisionador entra, permanece dentro o sale. Los callbacks de disparador funcionan con colisionadores estáticos y en movimiento; no se requiere un Movement_Agent no se requiere una

Comprobaciones de proximidad y lógica de impacto personalizada

Para zonas de disparador que usan consultas de rango en lugar de callbacks de colisionador, objetos recogibles, comprobaciones de proyectiles u otra lógica personalizada de impacto, usa:

  • Scene.get_all_components_in_range / Scene.get_closest_component_in_range

  • Comprobaciones simples de distancia (in_range) para decidir "dentro", "recogido", "impactado", etc.

Ayudantes de consulta de escena

Ejecuta el daño, los objetos recogibles y la puntuación en la ruta normal compartida de juego. No protejas la jugabilidad predicha con Game.is_server().

Volumen de disparador (entrar / permanecer / salir)

Para simular una zona de disparador, mantén una lista de quién estaba dentro en el frame anterior y compárala con los resultados del frame actual.

Objetos recogibles (el más cercano en rango)

"Impactos" de movimiento rápido (submuestreo simple)

Si te mueves rápido (dash, proyectil), puedes pasar por alto objetivos estrechos cuando solo compruebas la posición final. Una solución sencilla es el submuestreo por pasos: toma unas cuantas muestras entre la posición anterior y la nueva y ejecuta las mismas consultas de rango.

Última actualización