En Godot cada escena puede ser un componente para nuestro juego. Tenemos la posibilidad de juntar muchas escenas dentro de un nodo principal (visto de este modo las escenas son como familias de nodos que se juntan con un nodo padre).
Puedes descargar el proyecto Aquí.
Instanciar escenas desde el editor
Cuando guardamos una escena, se convierte en un PackedScene y genera una extensión «.tscn». Podemos hacer la instancia de una escena para colocarla dentro de un nivel. Para instanciar desde el editor tenemos que hacer clic en el siguiente botón:
Se nos abrirá el buscador de recursos y seleccionaremos la escena que queremos instanciar.
Después, en la posición (0,0) de nuestro nivel, se colocará la nueva escena.
Podemos moverla y usar las propiedades del nodo padre, pero no podemos cambiar sus nodos. Para eso tenemos que entrar en la escena, haciendo clic en el icono que se encuentra al lado de su nombre:
Instanciar escenas desde código
Al momento de instanciar objetos aleatorios o balas, no podemos usar el editor, ya que no sabemos en qué lugar vamos a poner la instancia.
Para instanciar algo mediante código, podemos hacer lo siguiente:
func _disparar():
var newBala = load("res://Bala/Bala.tscn").instance()
get_parent().add_child(newBala)
newBala.global_position = $spr/pos_disparo.global_position
newBala.direction = int($spr.scale.x)
newBala.scale.x = $spr.scale.x
Con «load()» podemos indicar la ruta de los recursos que queramos cargar. Tenemos que usar la dirección del archivo dentro de nuestra carpeta de proyecto, empezando con «res://». Además de eso, hay que tener en cuenta que se tiene que especificar el tipo de archivo «.tscn», «.gd», etc.
Cuando vamos a instanciar una escena, la debemos guardar en una variable para poder trabajar con sus propiedades.
Si colocamos «add_child(var_Instancia)» vamos a añadir nuestra nueva instancia como hija del nodo que esta ejecutando el código. Cuando estamos en un nivel, podemos usar un «get_parent().add_child(var_Instancia)» para obtener al padre del nodo que ejecuta el código y colocar nuestra nueva instancia como hija.
Recordemos que al instanciar un objeto, su posición inicial dentro del nivel es la (0,0). Con «global_position» podemos cambiar su posición usando un valor en «Vector2()». En caso de que sólo queramos cambiar su posición horizontal o vertical, usamos «global_position.x» o «global_position.y» y como valor ponemos un número entero.
Ya terminamos. Con estos sencillos pasos van a poder instanciar escenas en sus proyectos de Godot, si tienen una duda pueden dejarla en los comentarios.
hola muy buena web! saludos!
Esto ha resuelto mi duda que no encontre en la documentacion de godot, creo que faltaba la parte de load. Muy agradecido