Hola, sean bienvenidos a mi nuevo post, hoy hablaremos del “instanciado” en godot, como vimos en el post anterior hablamos sobre escenas y nodos, los nodos son los objetos del proyecto y la escena es el contenedor de los nodos, esto en un ejemplo simple como vimos en el post anterior y no nos sirve pero nosotros para cuando empecemos a trabajar porque vamos a tener la necesidad de varias escenas, por ejemplo en general. vamos a tener una escena principal, por ejemplo el nivel del juego, y luego vamos a incorporarle otras escenas, con sus respectivos nodos, para a su vez transformarse en nodos de la escena principal, esto es lo llamado instanciar.

Anuncios

Como dijimos antes, una escena es un conjunto de nodos interconectados y organizados en forma de arbol (tree)

godot23

Ahora, vamos a tener una escena A y sus respectivos nodos y una escena B con sus respectivos nodos, como vimos en el post anterior cuando grabamos las escenas en el disco lo hacemos con la extension .tscn, entonces deberiamos tener por ejemplo escenaA.tscn y escenaB.tscn.

godot24

Y ahora podemos transformar a Escena B en un nodo de Escena A llamandolo desde Escena A, esto es lo llamado Instanciar

godot25

Ahora veamoslo con un ejemplo para dejarlo mejor explicado, ante todo descarguen este archivo instancing  y lo extraen en alguna parte del disco (pero recuerden su ubicacion) luego vamos al editor de godot y desde ahi debemos seleccionar Importar

godot26

Aca nos van a pedir el path donde esta nuestro proyecto (o mas exactamente donde esta el proyect.godot) debemos ir hasta el path donde lo extrajimos y luego elegir “Importar y Editar”

godot27

Una vez dentro del editor, observemos como nos aparecio, en este proyecto vamos a tener dos escenas, una va a ser Main.tscn y la otra Ball.tscn. Para controlar las fisicas de la pelota se va a utilizar RigidBody2D y para las fisicas de los muros de Main utilizaremos StaticBody2D, si observan a su izquierda dentro de los recursos del proyecto hay un archivo .gd, este archivo va a ser el encargado de contener los scripts de nuestros nodos y/o escenas pero por ahora no lo vamos a tocar, esto es simplemente por si sienten curiosidad al momento de visualizar.

Anuncios

Ahora volvamos a lo nuestro, pasemos a la solapa Escena, donde vamos a tener todos nuestros nodos, seleccionamos Main y luego elegimos el boton parecido a un eslabon de cadena

godot28.png

Aca nos abrira una ventana de dialogo del resource path (res://) mostrandonos unicamente las escenas, en este caso deberiamos ver dos escenas, Main y Ball, elegimos Ball y esta se nos ubicara dentro de la escena de Main y en la solapa Escena aparecera como un nodo mas de la escena Main, reubicamos el nuevo “nodo” arrastrandolo dentro de la misma y si le damos al boton play si todo salio bien deberia aparecer un fondo con varios muros, una pelota cayendo donde rebotara en un par de oportunidades y se detendra, si el resultado es ese, exitos!!!! hemos logrado nuestra primera instancia.

Para nuestro siguiente caso, tambien podemos duplicar estas instancias de dos formas, volviendo a crearlas como hicimos con la escena Ball o clickeando sobre la instancia y apretando Ctrl+D (Duplicar), vean esta imagen

godot29.png

Observen como al duplicar, en la solapa Escena aparecieron los “nodos” o instancias de Ball con una numeracion automatica, si les dieran Play deberia ocurrir lo siguiente

instancing_multiball.gif
Anuncios

Pero si llegaron a eso, quiere decir que la multiple creacion de instancias funciono correctamente, para nuestro siguiente paso vamos a ver como editar algunas caracteristicas, elegimos la instancia Ball y en la solapa Inspector buscamos la propiedad bounce, si la modificamos de 0.5 a 1 esta modificara el rebote de la instancia Ball pero no la del resto, si le dan Play veran como se modifico esta instancia unicamente, observan en la propiedad bounce aparece un boton gris, este nos permite volver atras nuestro cambio

godot30.png

Esto hasta aqui fue un breve ejemplo de como se crean las instancias, es decir transformar escenas en nodos para tener una mejor interaccion, algunas caracteristicas de las instancias son:

  1. Se pueden subdividir escenas y permiten una mejor administracion
  2. Una alternativa mas flexible a la prefabricacion (y mucho mas poderoso dado que se pueden anidar)
  3. Se pueden organizar e incluir complejos modos o Interfaces de usuarios (En godot, las interfaces de usuarios son nodos tambien)

Lo mas practico de instanciar es ser utilizado como lenguaje de diseño porque godot fue diseñado desde cero con este concepto. La mejor forma de diseñar en godot, es pensar en la escena todo lo disponible para visualizar en pantalla, veamos un ejemplo de un juego tipo shooter

godot31

Analicemos esta figura, donde tenemos una escena principal llamada escena, y despues tenemos las distintas escenas donde las utilizaremos como instancias, tenemos la escena Nave del jugador y a su vez esta tiene la escena Arma despues tenemos dos instancias mas pero las cuales no van a ser del editor sino por codigo y estas son Balas y Misiles, despues tendremos dos instancias de Enemigo, otras con los obstaculos en la escena y la interfaz de los datos del jugador (HUD) y el acceso al Market para mejorar nuestra nave, cual es lo positivo? es no perder el tiempo en el diseño sino enfocarse en lo mas importante, el codigo, sino deberiamos primero diseñar cuales son todo los nodos accesibles por el jugador cuando llegue a tal o cual pantalla, y hoy vimos como usar instancias a traves del editor pero esto tambien se puede hacer via script pero sera para algun proximo post.

Anuncios

En resumen hemos visto como podemos crear varias escenas con sus respectivo nodos, y nosotros a traves de una instancia poder transformar algunas escenas en nodos para una escena principal permitiendo una mejor organizacion, administracion y manipulacion de los componentes en una escena, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00