routeNavmesh y colisión

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

Las navmeshes definen la áreas transitables en tu mundo. Úsalas para:

  • Ajustar los objetos generados al suelo alcanzable

  • Restringir a jugadores/NPCs a regiones transitables

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

Componentes (visión rápida)

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

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

  • Colliders: Box_Collider, Circle_Collider, Edge_Collider, Polygon_Collider

circle-info

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

Referencia de la API de Navmesh

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

    rebuild_immediately :: método() -> bool;
    mark_for_rebuild    :: método();
}

Configuración del editor (construyendo una navmesh)

  1. Crea una entidad y añade un Navmesh componente.

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

  3. Para cada Navmesh_Loop:

    • Añade puntos para definir la forma del bucle

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

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

circle-info

Por defecto, un Navmesh_Loop define un área transitable. Inviértelo para "hacer agujeros" (islas intransitables) en una navmesh existente.

Colliders y bucles de navmesh

Los colliders también pueden aportar bucles mediante las opciones del inspector de collider (por ejemplo "Hacer Navmesh Loop" / "Invertir Navmesh Loop").

Advertencias importantes:

  • Un Navmesh no hace reconstrucción automáticamente solo porque un collider cambie en tiempo de ejecución.

  • Si modificas la geometría del collider y dependes de bucles impulsados por colliders, reconstruye la navmesh manualmente (ver más abajo).

  • Si quieres una navmesh que ignore completamente los colliders, usa la opción del inspector de navmesh para ignorar colliders.

Generar sobre la 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 una navmesh:

circle-info

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

Reconstrucción de navmeshes (cuando la geometría cambia)

Usa una de:

  • mark_for_rebuild(): difiere la reconstrucción al inicio del siguiente frame (mejor para agrupar)

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

circle-exclamation

Colisión (soporte actual de CSL)

Los colliders existen como componentes (Box_Collider, Circle_Collider, Edge_Collider, Polygon_Collider), pero las callbacks de scripting de entrada/salida de colisión están aún no implementadas en CSL.

Comportamiento de colisión pseudo (triggers, pickups, "golpes")

Hasta que las callbacks de colisión se expongan en CSL, el enfoque estándar es:

  • Consultar componentes cercanos con Scene.get_all_components_in_range / Scene.get_closest_component_in_range

  • Realizar comprobaciones simples de distancia (in_range) para decidir "dentro", "recogido", "golpeado", etc.

Ayudantes de consulta de Scene

circle-info

Prefiere el lado del servidor para consecuencias de jugabilidad (daño, recogidas, puntuación). Usa comprobaciones locales solo para retroalimentación cosmética.

Volumen trigger (entrada / permanencia / salida)

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

circle-exclamation

Recogibles (el más cercano en rango)

"Golpes" por movimiento rápido (subpasos simples)

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

Última actualización