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

Navmesh y colisión

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

Los navmeshes definen las áreas transitables en tu mundo. Úsalos para:

  • Ajustar los objetos generados al suelo alcanzable

  • Restringir a los jugadores/PNJ a las regiones transitables

Los colliders también se pueden usar para recortar navmeshes en el editor.

Componentes (resumen rápido)

  • Navmesh: la malla de navegación horneada que consultas y reconstruyes

  • Navmesh_Loop: bucles de polígonos que definen los límites transitables (y los huecos)

  • Colliders: Box_Collider, Circle_Collider, Edge_Collider, Polygon_Collider

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

Referencia de la API de Navmesh

Navmesh :: class : Component {
    // Proyecta un punto sobre este navmesh.
    // 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 del navmesh. Devuelve el extremo y si la consulta tuvo éxito.
    try_raycast :: method(position: v2, direction: v2) -> v2, bool;

    // Encola una reconstrucción para la actualización normal del navmesh.
    mark_for_rebuild :: method();

    // Reconstruye ahora cuando una consulta en el mismo fotograma 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 del editor (construcción de un navmesh)

  1. Crea una entidad y añade un Navmesh 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

    • Activa Invertir interior y exterior para convertirlo en un hueco/obstáculo en lugar de un espacio transitable

  4. Usa las opciones de depuración del navmesh en el inspector para visualizar los triángulos.

De forma predeterminada, un Navmesh_Loop define un área transitable. Inviértelo para «perforar huecos» (islas no transitables) en un navmesh existente.

Colliders y bucles de navmesh

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

Advertencias importantes:

  • Con Activar reconstrucciones automáticas, los navmeshes detectan cambios de entrada en bucles, colliders, tilemaps y navmeshes hijos, y encolan una reconstrucción.

  • Activa Solo colliders hijos para ignorar colliders 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 fotograma que requiera la geometría modificada.

Generación sobre el navmesh (ajustar al suelo alcanzable)

Usa try_find_closest_point_on_navmesh para proyectar una posición deseada sobre el punto válido más cercano en un navmesh:

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

Reconstrucción inmediata de navmeshes

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

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

Los navmeshes padre se actualizan después de los navmeshes hijo, así que las mallas padre ensambladas incorporan automáticamente los cambios de entrada de las mallas hijas.

Lanzamiento de rayos a través de un navmesh

try_raycast sigue la dirección hasta el límite del navmesh. El segundo resultado informa de si la consulta tuvo éxito.

Disparadores de collider

Un collider con is_trigger == true puede notificar cuando otro collider entra, permanece dentro o sale. Las devoluciones de llamada de disparador funcionan con colliders estáticos y en movimiento; un Movement_Agent no es necesario.

Comprobaciones de proximidad y lógica de impacto personalizada

Para zonas de disparo que usan consultas de rango en lugar de devoluciones de llamada de colisionador, recogidas, comprobaciones de proyectiles u otra lógica de impacto personalizada, 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.

Ayudas de consulta de la escena

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

Volumen de disparo (entrar / permanecer / salir)

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

Recogibles (el más cercano dentro del rango)

Impactos por movimiento rápido (subpasos simples)

Si te mueves rápido (embestida, proyectil), puedes fallar objetivos estrechos al comprobar solo la posición final. Una solución sencilla es usar subpasos: muestrea algunos puntos entre la posición anterior y la nueva y ejecuta las mismas consultas de rango.

Última actualización