Habitaciones, portales y navegación
Polygon Engine ofrece dos sistemas mundiales independientes de capacidad fija:
- Las habitaciones y los portales rechazan conservadoramente los renderizadores fuera de la cadena de portales potencialmente visible de la cámara.
- La navegación preprocesa muestras de cuadrícula que consideran la altura y mueve los GameObjects con NavMesh Agent por rutas tridimensionales durante la ejecución.
Autor tanto de View > Advanced Scene Authoring > Rooms & Navigation.
Habitaciones
Una Room es un volumen alineado con el eje centrado en el GameObject Transform más su desplazamiento de autoría.
| Propiedad | Significado |
|---|---|
| Enabled | Incluir la sala en consultas en tiempo de ejecución |
| Name | Etiqueta única de escena local |
| Size | Ancho, altura y profundidad del volumen |
| Offset | Local descentrado de la habitación GameObject posición |
| Priority | Desempate cuando los volúmenes se superponen; el más alto gana |
Asigna renderizadores de malla de entorno con Renderer Room. Un renderizador no asignado sigue siendo elegible globalmente para la ruta de visibilidad normal.
En tiempo de ejecución, la Room de cámara es la Room habilitada con mayor prioridad cuyo AABB contiene la cámara. El renderizador sigue siendo elegible cuando es global o su Room asignada es retenida por el portal de tiempo de ejecución.
Portales y conectividad recursiva
Un Portal hace referencia a la Room A y la Room B y almacena un estado habilitado/abierto, ancho y alto de apertura, y la bandera Two Sided. El tiempo de ejecución de PS1 recorre el gráfico de forma recursiva:
- A puede llegar a B a través de cada Portal abierto habilitado;
- B puede alcanzar A solo cuando ese Portal es Two Sided;
- cada abertura válida directamente adyacente a la cámara se mantiene;
- Las habitaciones posteriores se conservan solo cuando los conos de apertura conservadores entrantes y salientes se superponen.
Cada cono contiene toda la abertura rectangular creada. La prueba es deliberadamente más amplia que un recorte exacto contra los planos del portal, por lo que puede conservar habitaciones que finalmente no sean visibles. Si hay referencias de grafo inválidas, transformaciones de portal faltantes o incorrectas, una habitación de cámara desconocida, una cámara dentro de una abertura, saturación de la cola u otros datos ambiguos, el sistema conserva la visibilidad para evitar que desaparezca una habitación. Los objetos con asignaciones globales o desconocidas de habitación también permanecen visibles.
Play Mode del editor y el entorno de ejecución de PS1 comparten los mismos cálculos conservadores de abertura, límites de recursión y política de conservar la visibilidad ante errores; por eso consideran las mismas habitaciones para un mismo estado de cámara y escena. Valida el rendimiento y la presentación final en la compilación empaquetada. Este sistema no ofrece consultas de oclusión por hardware, división automática de habitaciones ni asignación automática de habitaciones por triángulo.
Lua puede cambiar un Portal en tiempo de ejecución:
local doorPortal = -1
function Start(gameObjectId)
doorPortal = GameObject.Find("Door Portal")
end
function openDoor(gameObjectId)
Portal.SetOpen(doorPortal, true)
end
Ver el API de Portal en Lua.
Bake de navegación con reconocimiento de altura
Agregar NavMesh Surface a una raíz GameObject. Su volumen establece una cuadrícula X/Z y un rango de muestreo vertical. La superficie puede girar alrededor de Y. El centro de la superficie Y sigue siendo un piso base compatible con versiones anteriores, mientras que las caras de caja transitables explícitas añaden o reemplazan capas cuantificadas. El preprocesamiento crea enlaces deterministas de cuatro vecinos entre muestras compatibles.
| Propiedad de superficie | Default | Efecto de preprocesamiento |
|---|---|---|
| Size / Offset | 8,4,8 / 0,0,0 | Limita el volumen muestreado |
| Cell Size | 0.50 | Resolución de cuadrícula X/Z |
| Cell Height | 0.25 | Cuantifica las alturas muestreadas |
| Agent Radius | 0.30 | Amplía la eliminación de obstáculos |
| Agent Height | 1.80 | Rechaza nodos sin suficiente espacio libre |
| Max Step | 0.35 | Diferencia de altura normal máxima de vecino |
| Max Slope | 45 grados | Rechaza las caras más empinadas andables |
| Max Drop | 1.50 | Máximo descenso WalkOff unidireccional |
El preprocesamiento puede retener múltiples muestras Y en la misma celda X/Z, permitiendo pisos superpuestos dentro de un volumen de superficie. Aumenta la altura del volumen y coloca una geometría caminable explícita en cada nivel.
Navigation Modifier Áreas
Navigation Modifier clasifica un Collider para el preprocesamiento. La geometría del modificador debe estar en una raíz GameObject.
| Zona | Regla Collider | Resultados |
|---|---|---|
| Obstacle | Caja o esfera que no sea trigger | Bloquea las celdas de navegación cubiertas |
| Walkable | Caja sólida | Muestra la cara superior de la caja como geometría transitable |
| Platform | Caja sólida | El mismo comportamiento estático de preprocesamiento que Walkable; etiqueta de autor útil para plataformas |
| WalkOff | Volumen de disparo | Permite enlaces hacia abajo solo desde celdas de origen cubiertas |
Los Box Colliders marcados como Walkable y Platform pueden rotarse o inclinarse. El proceso de preprocesamiento evalúa su plano superior transformado, altura y pendiente. Platform es una clasificación estática del preprocesamiento; no incorpora la velocidad de plataformas móviles, el seguimiento de pasajeros ni la actualización dinámica de la navegación.
Un enlace WalkOff se crea solo cuando el destino es inferior en más de Max Step y no más de Max Drop. No tiene un enlace ascendente inverso. El trigger marca el permiso para descender; no simula caídas ni reemplaza la colisión del juego.
Los Colliders no desencadenantes ordinarios son obstáculos a menos que un modificador Walkable/Platform los clasifique de otra manera. Las cajas de obstáculos ordinarias soportan la rotación Y para el preprocesamiento de navegación. La superficie NavMesh y los obstáculos ordinarios siguen siendo rutas de autoría de raíz, solo guiñada; el muestreo explícito de la caja Walkable / Platform es la ruta de pendiente girada compatible.
Usa Preview Navigation Bake para inspeccionar recuentos de nodos y enlaces dirigidos, advertencias y errores antes de construir. Su gráfico de arriba hacia abajo utiliza el color del nodo para representar la altura. El menú preestablecido ofrece:
| Preset | Cell Size / Cell Height | Agent Radius / Agent Height | Max Step / Max Slope / Max Drop |
|---|---|---|---|
| Balanced | 0.50 / 0.25 | 0.30 / 1.80 | 0.35 / 45 / 1.50 |
| Tight Indoor | 0.25 / 0.125 | 0.30 / 1.80 | 0.30 / 45 / 1.00 |
| Large Outdoor | 1.00 / 0.50 | 0.45 / 2.00 | 0.50 / 42 / 2.00 |
| Precision Platforming | 0.25 / 0.125 | 0.25 / 1.60 | 0.20 / 40 / 4.00 |
Apply Preset cambia los parámetros de preprocesamiento pero no la superficie Tamaño o Desplazamiento. Vuelve a obtener una vista previa del resultado después de cualquier cambio de geometría o parámetro y, a continuación, valida la ruta de ejecución empaquetada en la escena deseada.
Agentes de navegación
Un agente NavMesh Agent debe estar en una raíz GameObject y hacer referencia a una superficie.
| Propiedad | Significado |
|---|---|
| Speed | Velocidad de movimiento máxima |
| Acceleration | Tasa utilizada para acercarse a la velocidad máxima |
| Stopping Distance | Tolerancia final del waypoint |
| Rotate to Velocity | Girar la rotación Y hacia el movimiento X/Z |
NavMeshAgent.SetDestination() encuentra una ruta completa de menor costo mediante
una búsqueda Dijkstra determinista. Puede seguir enlaces explícitos hacia superficies
conectadas y mueve el GameObject por puntos tridimensionales precalculados. Las rutas
que superan 32 puntos se rechazan en lugar de devolver una ruta parcial engañosa.
Una aceleración de cero aplica la velocidad completa inmediatamente. Comprueba el
resultado booleano de cada solicitud.
La navegación modifica el Transform raíz. Si otro script mueve un agente activo, recalcula la ruta desde esa posición sobre el grafo existente o se detiene si no hay una ruta completa. No añade respuesta de colisiones de Character Controller, evasión de obstáculos dinámicos ni reconstrucción de la geometría durante el juego.
El preprocesamiento no genera una navmesh de triángulos arbitrarios ni un sistema de ejecución como Recast. Consulta la API de NavMesh y NavMeshAgent en Lua.
Primera escena navegable
- Crea un GameObject raíz llamado Navigation Surface. En View > Advanced Scene Authoring > Rooms & Navigation, añade NavMeshSurface y mantenlo habilitado. Coloca su centro Y a la altura del piso.
- El Size inicial es de 8 por 4 por 8 unidades y Cell Size es 0.5. Una capa sin obstáculos usa 256 nodos, el límite de la escena. Para añadir superficies o pisos superpuestos, reduce Size o aumenta Cell Size antes de generar más nodos. Los presets cambian los parámetros de celda, no el tamaño del volumen.
- Marca las cajas sólidas del piso con Navigation Modifier > Walkable. Las cajas sólidas de pared normales bloquean la navegación. Mantén esta geometría en la raíz de la escena. El grafo se obtiene del volumen y los colliders, no de los triángulos de la malla visual.
- Crea un GameObject raíz para el agente. Pon su origen a la altura de los pies cerca de una muestra, añade NavMeshAgent y asigna la superficie habilitada. Coloca el modelo visible como hijo si tiene el origen en su centro. El Collider propio de un agente habilitado se excluye del cálculo de obstáculos estáticos.
- Pulsa Preview Navigation Bake. Comprueba que el inicio y el destino tengan nodos conectados por enlaces. Las paredes delgadas deben separar las rutas; ajusta Cell Size y Agent Radius para mantener los pasillos transitables.
- Añade un Lua Behaviour y usa el ejemplo de movimiento. Reinicia Play Mode después de editar la geometría de navegación. Exporta de nuevo para actualizar el grafo utilizado en PS1.
Enlaces de navegación explícitos
Añade Navigation Link a un GameObject raíz para conectar muestras o superficies separadas. Configura Start Surface y End Surface cuando necesites seleccionar superficies concretas. Los offsets de los extremos usan el Transform local del GameObject del enlace. Snap Distance limita la distancia de proyección a un nodo.
Activa Bidirectional para permitir ambos sentidos; de lo contrario solo se permite ir del inicio al final. Cost Multiplier controla la preferencia de ruta. Si varios enlaces conectan los mismos nodos se utiliza el costo menor. La vista previa informa si un extremo no puede proyectarse o ambos terminan en el mismo nodo.
La superficie asignada al agente establece la red alcanzable. Las superficies sin conexiones no se unen automáticamente. El recorrido mueve al agente en línea recta por el segmento creado: el enlace autoriza cruzarlo, así que comprueba su espacio libre. No hace saltar al agente, animar una escalera, abrir una puerta ni esperar un elevador automáticamente.
Solución de problemas de navegación
| Síntoma | Qué revisar |
|---|---|
| Un agente habilitado referencia una superficie deshabilitada | Habilita el GameObject y el componente de la superficie, o deshabilita el agente |
| No hay celdas transitables | Marca el piso sólido como Walkable; revisa altura del piso, colliders bloqueantes, límites del volumen y espacio libre del agente |
| Se rechaza el destino | Revisa la altura y distancia a los nodos, las conexiones dirigidas y el límite de 32 puntos; usa un radio pequeño de SamplePosition y comprueba SetDestination |
| La ruta se detiene después de un teletransporte | La nueva posición no permite llegar al objetivo existente; colócalo sobre una muestra válida y solicita un destino nuevo |
| El agente reinicia su ruta o apenas acelera | No solicites el mismo destino en cada frame ni combines navegación con otro controlador de movimiento |
| Se ignoran los cambios de escena durante el juego | El grafo es estático; reinicia Play Mode o exporta de nuevo después de editar geometría |
Límites
| Recursos | Límite |
|---|---|
| Habitaciones | 24 |
| Portales | 48 |
| NavMesh Superficies | 4 |
| Agentes de NavMesh | 16 |
| Nodos preprocesados | 256 |
| Enlaces dirigidos preprocesados | 1,024 |
| Puntos de ruta por solicitud | 32 |
Aumenta el tamaño de la celda, reduce los pisos muestreados o divide la escena cuando el gráfico se acerque a la capacidad del nodo o enlace.