Como passar parâmetros entre cenas

Este exemplo irá fazer com que um valor seja digitado na cena principal, e este valor será reconhecido na cena secundária.

A estrutura do exemplo seguirá desta forma:

Primeiro, vamos construir a base da cena main-scene.tscn. Para simplificar este exemplo, ele será composto por apenas um controle LineEdit.

Em seguida, iremos criar um script básico que irá cuidar de chamar a outra cena, passando o valor digitado no input. Ficará desta forma:

#script-main-scene.gd

extends Node2D

@onready var input_text = $LineEdit
var battle_scene = preload("res://Tutorial/next-scene.tscn")

func _input(event):
	if (Input.is_action_just_pressed("action")):
		var scene = battle_scene.instantiate()
		scene.input_value = input_text.text
		
		get_tree().root.add_child(scene)
		get_tree().root.remove_child(self)

No script, estamos salvando o controle LineEdit em uma variável input_text, e vamos pré-carregar a próxima cena em na variável next_scene. E para chamar a próxima cena, vamos esperar que a tecla de ação action seja apertada.

“Mas como eu configuro esta tecla de ação?” Pois bem, basta selecionar as configurações do projeto, e procurar por Input Map:

Voltando ao script, a linha scene.input_value = input_text.text indica que a cena instanciada possui uma variável de controle chamada input_value, e estamos gravando o valor do texto digitado nele.

Agora vamos focar na segunda cena. Ela também possuirá uma estrutura simples:

E agora vamos cuidar do script desta cena. Ela ficará desta forma:

#script-next-scene.gd

extends Node2D

@export var input_value: String
@onready var input = $LineEdit

func _ready():
	input.text = input_value

O nome do campo que irá receber o parâmetro precisa, obrigatoriamente, ser o mesmo valor usado no script script-main-scene.gd, ou seja, precisa se chamar input_value.

Você pode passar textos, números, dicionários, objetos… O céu é o limite.