🛫

【Godot Engine】シーンチェンジ先のシーンに引数を渡す

2022/12/20に公開

はじめに

SceneTree.change_scene()でシーンを変更する時は、変更先のシーンに引数を渡せません。
今回は、AutoLoadを使用して擬似的に引数を渡す方法を紹介します。

方法

Main.gd
extends Node2D
@onready var Line = $LineEdit 

func _on_button_pressed():
    Global.text = Line.text
    get_tree().change_scene_to_file("res://NewScene.tscn")
Global.gd
extends Node
var text:String = ""
NewScene.gd
extends Node2D
@onready var label = $Label

func _ready():
    label.text = Global.text

このコードでは、MainシーンのButtonを押下した時、
LineEdit.textの値をGlobal.vb経由でNewScene.gdに渡しています。

Global.gdを複数のシーンを跨いで使用可能にするために、
プロジェクト>プロジェクト設定>AutoLoadGlobal.gdを追加しておく必要があります。

Global.gdにてノードとして使用できるクラスを継承しておかないと変数の読み書きができない点に注意しましょう。

サンプルコード

https://github.com/gurencrize/SceneChangeWithArgument

参考記事

https://docs.godotengine.org/ja/latest/tutorials/scripting/singletons_autoload.html
https://godotengine.org/qa/1883/transfering-a-variable-over-to-another-scene

Discussion