Instanciar

Introducción

Crear una escena simple y agregar nodos puede servir para proyectos pequeños, pero cuando un proyecto crece en tamaño y complejidad, el número de nodos se puede volver rápidamente inmanejable. Para abordar eso, Godot permite que un proyecto pueda separarse en cualquier número de escenas. Esto provee una poderosa herramienta que ayuda a organizar los diferentes componentes de tu juego.

En Escenas y nodos has aprendido que una escena es una colección de nodos organizados en una estructura de árbol, con un nodo simple como raíz del árbol.

../../_images/tree.png

Puedes crear cuantas escenas quieras y grabarlas en el disco. Las escenas grabadas de esta manera se llaman «Packed Scenes» y tienen una extensión de archivo .tscn.

../../_images/instancingpre.png

Una vez que se ha guardado la escena, se puede instanciar en otra escena como cualquier otro nodo.

../../_images/instancing.png

En la imagen anterior, Scene B se añadió a Scene A como una instancia.

Instanciar con ejemplos

Para aprender cómo funciona instanciar, comencemos descargando un proyecto de ejemplo: instancing.zip.

Descomprime el proyecto donde desees. Luego abre Godot y agrega este proyecto al administrador de proyectos usando el botón “Importar”:

../../_images/instancing_import.png

Navega hasta la carpeta donde se extrajo el proyecto y abre el archivo «project.godot» que está dentro. Después de hacer esto, el proyecto nuevo aparecerá en la lista. Edita el proyecto presionando el botón “Editar”.

Este proyecto contiene dos escenas: «Ball.tscn» y «Main.tscn». La escena Ball usa un RigidBody2D para otorgar un comportamiento físico mientras que la escena Main tiene una serie de obstáculos para que la bola colisione con ellos (usando StaticBody2D).

../../_images/instancing_ballscene.png ../../_images/instancing_mainscene.png

Abre la escena Main y luego selecciona el nodo raíz:

../../_images/instancing_mainroot.png

Queremos agregar la instancia de la escena Ball como hija de Main. Click en el botón con forma de «cadena» (su texto emergente dice «Instanciar un archivo de escena como Nodo.») y selecciona el archivo Ball.tscn.

../../_images/instancing_linkbutton.png

La bola se colocará en la esquina superior izquierda del área de pantalla (esto es (0, 0) en coordenadas de pantalla). Haz clic y arrastra la bola cerca de la parte superior central de la escena:

../../_images/instancing_placeball.png

Presiona «Reproducir» y verás la bola caer hasta la parte inferior de la pantalla:

../../_images/instancing_playbutton.png

Instancias múltiples

Puedes añadir tantas instancias como desees a una escena, ya sea usando el botón «Instancia» nuevamente, o haciendo clic en la instancia de la bola y presionando «Duplicar» (Ctrl-D):

../../_images/instancing_multiball.png

Ejecuta la escena de nuevo y todas las bolas caerán.

../../_images/instancing_multiball.gif

Editar instancias

Abre la escena Ball y agrega un PhysicsMaterial haciendo click en la flecha y seleccionado «Nuevo PhysicsMaterial».

../../_images/instancing_physicsmat1.png

Luego, expande el material haciendo click en este, y asigna 1 a la propiedad Bounce.

../../_images/instancing_physicsmat2.png

Presiona «Play» y observa que todas las bolas instanciadas ahora rebotan mucho más. Debido a que las bolas instanciadas están basadas en la escena guardada, los cambios en esa escena afectarán a todas las instancias.

También puedes ajustar instancias individuales. Vuelve a poner el valor de bounce (rebote) en 0 y, a continuación, en la escena Main, selecciona una de las bolas en cuestión. Por defecto, recursos como PhysicsMaterial son compartidos entre instancias, así que necesitamos hacerlos únicos. Haz clic en la flecha inferior y selecciona «Make Unique». Establece la opción Bounce en 1 y pulsa «Play».

../../_images/instancing_property.png

Date cuenta del botón gris de «volver» que aparece junto a la propiedad modificada. Cuando este botón está presente, quiere decir que has modificado una propiedad en la escena instanciada cambiando su valor respecto de la escena guardada. Aunque esa propiedad se modifique en la escena original, el valor modificado permanecerá. Presionando el botón volver restaurará el valor de la propiedad en la escena guardada.

Conclusión

Instanciar puede ser útil cuando quieres crear muchas copias de un mismo objeto. También es posible crear instancias desde el código usando GDScript, ver Instanciar (continuación).