Ejemplo de Portales y Salas

Descarga este proyecto de tutorial: Ejemplo de Portales Simple.

Introducción

Este tutorial te guiará en la construcción de un sistema de salas "Hola Mundo" con dos salas y un portal en medio.

Paso 1

../../../_images/tutorial_simple_1.png
  • Creando un nuevo proyecto.

  • Agrega un Spatial como raíz de la escena (en la captura de pantalla, se llama "Root").

  • A continuación, agrega un nodo RoomManager. Lo necesitaremos más adelante para procesar el sistema de salas.

  • A continuación, necesitamos empezar a definir nuestras salas. Creamos todas nuestras salas debajo de otro nodo Spatial que hemos llamado 'RoomList'.

  • Agrega un nuevo nodo Room como hijo de "RoomList".

  • Hemos llamado a la habitación Cocina.

  • Ahora crearemos la geometría de nuestra sala. Los nombres que le des a la geometría dependen de ti.

  • Crea un MeshInstance para el suelo. Agrega un recurso de CubeMesh al MeshInstance para crear una caja. Escala y posiciona la caja para formar un suelo.

  • Crea instancias de malla (MeshInstance) para las paredes. Crea más cajas para esto, luego escala y posiciona cada una de ellas. Asegúrate de dejar una apertura en un lado. Para lograrlo, deberás crear dos segmentos de pared en ese lado.

Paso 2

../../../_images/tutorial_simple_2.png
  • Ahora tenemos que crear la otra habitación.

  • Puedes hacer esto simplemente duplicando la primera sala. Selecciona el nodo Cocina, haz clic derecho y elige Duplicar.

  • Rota y posiciona la segunda sala de manera que las aperturas se alineen.

  • Renombra la segunda sala como "Sala de estar".

Paso 3

../../../_images/tutorial_simple_3.png
  • A continuación, agregaremos un portal entre las dos salas.

  • Crea un nuevo nodo Portal en la cocina.

  • Escala y posiciona el portal utilizando el nodo Transform en el inspector para que se ajuste dentro de la abertura entre las dos salas.

  • El plano del portal debe estar orientado hacia afuera desde la sala de origen, es decir, hacia la sala de estar. Esta dirección se indica mediante la flecha en el gizmo del editor y el color del gizmo del portal.

Paso 4

../../../_images/tutorial_simple_4.png
  • Para hacer las cosas más emocionantes, queremos agregar algunas cajas más a las salas.

  • Colocar estas cajas como hijos o nietos de los nodos de las salas indica explícitamente al sistema en qué sala deben estar los objetos. Sin embargo, también podemos crear estos objetos fuera de las salas. Siempre y cuando estén en la rama de "RoomList", el sistema intentará colocarlos automáticamente en la sala correcta durante la ejecución.

  • En la captura de pantalla, las cajas se colocaron como hijos de un nodo Spatial que has llamado Freeform para mantener las cosas ordenadas.

  • Las cajas también tienen asignado un material espacial verde para que se destaquen más del resto de la sala.

  • También crearemos una OmniLight para que se coloque automáticamente en una de las salas.

Paso 5

../../../_images/tutorial_simple_5.png
  • A continuación, llega una etapa crucial. ¡Debemos informar al RoomManager dónde están las salas!

  • Selecciona el RoomManager y busca en la ventana del Inspector en la sección Paths.

  • Debes asignar la Room List para que apunte al nodo RoomList que creamos anteriormente (que es el padre de todas las salas).

Paso 6

../../../_images/tutorial_simple_6.png
  • Asegúrate de haber guardado tu proyecto antes de dar el siguiente paso. Siempre es una buena idea guardar y hacer una copia de seguridad antes de realizar la conversión.

  • Selecciona el RoomManager y verás un botón en la barra de herramientas en la parte superior de la vista del editor 3D llamado Convert Rooms. Haz clic en este botón.

  • Si todo va bien, el RoomManager habrá creado los datos en tiempo de ejecución (el gráfico de salas) para realizar el descarte de ocultación durante la ejecución.

  • Puedes ver un registro del proceso de conversión en la ventana de salida. Esto es útil para encontrar problemas.

  • Si ahora mueves la cámara del editor dentro de las salas, deberías ver cómo las mallas de la sala opuesta se descartan dependiendo de lo que puedas ver a través del portal.

Conclusión

Esto concluye este tutorial simple. No temas experimentar con el nuevo sistema de salas que has creado.

Algunas cosas para probar

  • Crea diferentes tipos de geometría. Los nodos CSG, los sistemas de partículas y las mallas múltiples son compatibles con el sistema de portales.

  • Intenta crear una cámara y añadirla a la escena. Si ejecutas la escena, notarás que el descarte de los portales no está activo. Esto se debe a que el gráfico de salas debe crearse cada vez que cargas un nivel, convirtiendo las salas. En lugar de utilizar un botón en el editor, en los juegos reales se llama a una función en el RoomManager para convertir el nivel, llamada rooms_convert(). Prueba esto con un script, tal vez ejecutándolo dentro de una función _ready().

  • La geometría que has creado hasta ahora es toda STATIC (no se mueve). Si miras en el inspector de los nodos de geometría, verás que derivan de CullInstance. Aquí puedes establecer el Modo de Portal para los objetos en el sistema de portales. Esto determina cómo se procesa el nodo.

  • Si ahora escribes un script para mover uno de tus objetos dentro de una sala y lo ves a través de una cámara mientras se ejecuta la escena, es posible que notes que el objeto se descarta incorrectamente. Esto se debe a que se asume que los objetos STATIC no se mueven en el sistema. Si en cambio cambias el objeto a DYNAMIC, ahora debería actualizarse el descarte correctamente.

  • Existen varios``portal_modes`` que están descritos en la documentación principal.

  • Intenta activar y desactivar el portal durante la ejecución desde tu script. Puedes llamar a set_portal_active() para abrir y cerrar el portal.

  • Si seleccionas el portal, deberías ver que aparecen 4 manipuladores. Intenta arrastrar los puntos del portal con el ratón y observa cómo afecta a los objetos que se descartan.

  • Si seleccionas una sala y haces clic en el botón Generate Points en la barra de herramientas, se guardarán los puntos del casco de la habitación en el inspector de la sala. Ahora puedes editar estos puntos con los manipuladores del gizmo.