【Godot 4入門】シーン追加(生成)とシーン切り替えの完全ガイド

スポンサーリンク

Godot 4 では、Godot 3 からメソッド名が一部変更されています。この記事では、スクリプトからシーンを操作する最も標準的な方法を解説します。

シーンの追加(インスタンス化)

「弾を生成する」「敵をスポーンさせる」など、現在のシーンの中に別のシーンを登場させたい場合に使います。

手順

  1. シーンのロード: PackedScene として読み込む。
  2. インスタンス化: .instantiate() で実体を作る。
  3. ツリーへの追加: 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()。
    これだけで、ゲームの基本的な流れは作れるようになります!

コメント

タイトルとURLをコピーしました