Godot 4 では、Godot 3 からメソッド名が一部変更されています。この記事では、スクリプトからシーンを操作する最も標準的な方法を解説します。
シーンの追加(インスタンス化)
「弾を生成する」「敵をスポーンさせる」など、現在のシーンの中に別のシーンを登場させたい場合に使います。
手順
- シーンのロード: PackedScene として読み込む。
- インスタンス化: .instantiate() で実体を作る。
- ツリーへの追加: add_child() でシーン上に配置する。
サンプルコード
extends Node2D
# 1. 生成したいシーンをインスペクターから指定できるようにする
@export var bullet_scene: PackedScene
func _input(event):
if event.is_action_pressed("ui_accept"): # スペースキーなどで実行
spawn_bullet()
func spawn_bullet():
# 2. シーンをインスタンス化
var bullet = bullet_scene.instantiate()
# 必要に応じてプロパティをセット
bullet.position = position
# 3. 現在のノードの子として追加
add_child(bullet)シーンの切り替え(遷移)
「タイトル画面からメイン画面へ」「ステージ1からステージ2へ」など、ゲームの世界そのものを入れ替えたい場合に使います。
方法 A: ファイルパスで直接指定
最も手軽な方法です。
func _on_button_pressed():
# シーンツリーを取得してファイルを切り替える
get_tree().change_scene_to_file("res://scenes/level_2.tscn")方法 B: 読み込み済みのシーン(PackedScene)を使う
あらかじめロードしてある場合や、@export で指定したシーンを使いたい場合に適しています。
@export var next_level: PackedScene
func go_to_next():
# 読み込み済みのデータを使って切り替える
get_tree().change_scene_to_packed(next_level)どっちを使うべき?
| やりたいこと | 使う方法 | メソッド |
|---|---|---|
| 弾、敵、エフェクトの生成 | シーンの追加 | instantiate() + add_child() |
| ステージ移動、画面遷移 | シーンの切り替え | change_scene_to_file() |
注意点
- メモリ管理: add_child() で増やしたものは、不要になったら queue_free() で消すのを忘れないようにしましょう。
- Godot 4 の変更: Godot 3 では .instance() でしたが、Godot 4 では .instantiate() になっています。
まとめ
- 既存のシーンに「モノ」を足すなら instantiate()。
- ゲームの「場所」を変えるなら change_scene_to_file()。
これだけで、ゲームの基本的な流れは作れるようになります!

コメント