Saltar al contenido principal

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.

PropiedadSignificado
EnabledIncluir la sala en consultas en tiempo de ejecución
NameEtiqueta única de escena local
SizeAncho, altura y profundidad del volumen
OffsetLocal descentrado de la habitación GameObject posición
PriorityDesempate 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 superficieDefaultEfecto de preprocesamiento
Size / Offset8,4,8 / 0,0,0Limita el volumen muestreado
Cell Size0.50Resolución de cuadrícula X/Z
Cell Height0.25Cuantifica las alturas muestreadas
Agent Radius0.30Amplía la eliminación de obstáculos
Agent Height1.80Rechaza nodos sin suficiente espacio libre
Max Step0.35Diferencia de altura normal máxima de vecino
Max Slope45 gradosRechaza las caras más empinadas andables
Max Drop1.50Má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 clasifica un Collider para el preprocesamiento. La geometría del modificador debe estar en una raíz GameObject.

ZonaRegla ColliderResultados
ObstacleCaja o esfera que no sea triggerBloquea las celdas de navegación cubiertas
WalkableCaja sólidaMuestra la cara superior de la caja como geometría transitable
PlatformCaja sólidaEl mismo comportamiento estático de preprocesamiento que Walkable; etiqueta de autor útil para plataformas
WalkOffVolumen de disparoPermite 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:

PresetCell Size / Cell HeightAgent Radius / Agent HeightMax Step / Max Slope / Max Drop
Balanced0.50 / 0.250.30 / 1.800.35 / 45 / 1.50
Tight Indoor0.25 / 0.1250.30 / 1.800.30 / 45 / 1.00
Large Outdoor1.00 / 0.500.45 / 2.000.50 / 42 / 2.00
Precision Platforming0.25 / 0.1250.25 / 1.600.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.

Un agente NavMesh Agent debe estar en una raíz GameObject y hacer referencia a una superficie.

PropiedadSignificado
SpeedVelocidad de movimiento máxima
AccelerationTasa utilizada para acercarse a la velocidad máxima
Stopping DistanceTolerancia final del waypoint
Rotate to VelocityGirar 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​

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

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.

SíntomaQué revisar
Un agente habilitado referencia una superficie deshabilitadaHabilita el GameObject y el componente de la superficie, o deshabilita el agente
No hay celdas transitablesMarca el piso sólido como Walkable; revisa altura del piso, colliders bloqueantes, límites del volumen y espacio libre del agente
Se rechaza el destinoRevisa 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 teletransporteLa 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 aceleraNo solicites el mismo destino en cada frame ni combines navegación con otro controlador de movimiento
Se ignoran los cambios de escena durante el juegoEl grafo es estático; reinicia Play Mode o exporta de nuevo después de editar geometría

Límites​

RecursosLímite
Habitaciones24
Portales48
NavMesh Superficies4
Agentes de NavMesh16
Nodos preprocesados256
Enlaces dirigidos preprocesados1,024
Puntos de ruta por solicitud32

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.