概要
ゲーム開発を進めていくと、「プレイヤーのHPを次のステージに引き継ぎたい」「ハイスコアを記録したい」「ゲーム全体の設定をどこかで一元管理したい」といった要求が出てきます。しかし、Godotではchange_scene_to_file()などでシーンを切り替えると、通常は古いシーンのすべての情報が破棄されてしまいます。
この問題を解決し、シーンをまたいでデータを永続的に保持するための最も簡単で強力な方法が、Autoload(オートロード) 機能です。これは、一般的に「シングルトン」と呼ばれるデザインパターンをGodotで簡単に実現する仕組みです。
この記事では、Autoloadの概念と使い方を学び、ゲーム全体で共有されるデータ管理の方法をマスターします。
Autoload(シングルトン)とは?
Autoloadとは、ゲームの起動時に自動的に読み込ま れ、ゲームが終了するまで常にメモリ上に存在し続けるノード(または単なるスクリプト)のことです。一度Autoloadに登録すると、どのシーンのどのスクリプトからでも、グローバル変数のように簡単にアクセスできるようになります。
主な用途:
- グローバルな状態管理: プレイヤーのスコア、所持金、ライフなど、ゲーム全体で共有する情報。
- 汎用的な機能の提供: サウンド管理、シーン遷移のエフェクト、設定情報など、どこからでも呼び出したい機能。
- マネージャーノード: ゲーム全体の進行を管理する親玉のような存在。
Autoloadの設定方法
Autoloadの設定は、プロジェクト設定から数クリックで行えます。
1. グローバルなスクリプトを作成
まず、管理したいデータや機能を持つスクリプトを作成します。例えば、GlobalState.gdという名前のスクリプトを作り、以下のように記述します。
extends Node
var current_score = 0
var high_score = 0
func add_score(amount):
current_score += amount
if current_score > high_score:
high_score = current_score
func reset_score():
current_score = 0
2. プロジェクト設定を開く
メニューバーから「プロジェクト」→「プロジェクト設定」を選択します。
3. Autoloadタブに移動
上部のタブから「Autoload」を選択します。

4. スクリプトを登録
「パス」のフォルダアイコンをクリックして、先ほど作成したGlobalState.gdを選択します。「ノード名」は自動的にスクリプト名と同じGlobalStateになります(変更も可能)。「追加」ボタンを押して登録完了です。

スクリプトからのアクセス方法
Autoloadに登録したノード(この例ではGlobalState)は、登録したノード名がそのままグローバル変数のように 機能します。どのスクリプトからでも、事前のget_node()や@onready宣言なしに直接アクセスできます。
# 敵を倒した時の処理
func _on_enemy_defeated():
# GlobalStateの関数を直接呼び出す
GlobalState.add_score(100)
print("現在のスコア: ", GlobalState.current_score)
# ゲームオーバー画面の処理
func _ready():
# GlobalStateの変数を直接参照する
$HighScoreLabel.text = "ハイスコア: %d" % GlobalState.high_score
このように、GlobalStateという名前でどこからでもアクセスできるため、シーンをまたいだデータの受け渡しが非常にシンプルになります。
まとめ
Autoloadは、Godotにおけるグローバルな データ管理の基本であり、非常に強力なツールです。シーンをまたいで情報を保持したい、どこからでも呼び出せる便利な機能を作りたい、と思ったら、まずはAutoloadの利用を検討しましょう。
ただし、何でもかんでもAutoloadに登録すると、コードの依存関係が複雑になり、見通しが悪くなる可能性もあります。本当に「グローバル」である必要があるデータや機能を見極めて使うことが、綺麗なプロジェクトを保つ秘訣です。