ゲーム開発では、スコアやキャラクターの体力、ステージの進行状況など、ゲーム全体で共有したいデータがあります。Godotでは、グローバル変数を使って、どのシーンからでもアクセス可能なデータを管理できます。
今回は、Godotでグローバル変数を使う方法を初心者向けに解説します。また、実際の使い方を具体的な例とともに紹介したいと思います。
【Godot】グローバル変数を使う方法について初心者向けに解説!
グローバル変数とは、ゲーム全体で共有される変数のことです。
通常、スクリプト内で定義された変数は、そのスクリプトがアタッチされているオブジェクト内でしか使えません。しかし、グローバル変数を使えば、異なるシーンやスクリプト間で同じデータを簡単に共有できます。
グローバル変数の主な用途
- スコア管理:どのシーンでも現在のスコアを表示。
- プレイヤーステータス管理:キャラクターの体力やレベルを共有。
- 設定情報の保存:音量や言語設定など。
Godotでグローバル変数を使う手順
自作のグローバルスクリプトを作成する
Godotでは、グローバル変数を管理するための専用スクリプトを作成し、それをプロジェクト全体で利用する形で実装します。
手順
- スクリプトを作成する
プロジェクト内の任意のフォルダで、新規スクリプトを作成します。私の場合はScriptsフォルダを作成したので、右クリックしてスクリプトより「Global.gd」スクリプトを作成します。ファイル名を「Global.gd」に設定します。親クラスにはデフォルトのままNodeに設定します。 - 変数を定義する
作成したスクリプト内に、グローバル変数を定義します。
1 2 3 4 5 6 |
extends Node # グローバル変数の定義 var player_score = 0 # スコア var player_health = 100 # 体力 var game_level = 1 # 現在のステージ番号 |
サンプルとして、スコアや体力等をグローバル変数として定義しています。
2. グローバルスクリプトを自動読み込みとして登録
作成したスクリプトを自動読み込みとして設定することで、プロジェクト全体でどのシーンからでもアクセスできるようになります。
手順
Godotエディタで「プロジェクト」メニューから「プロジェクト設定」を開きます。
「グローバル」タブを開いて、パスの右にあるアイコンをクリックして「Global.gd」を選択します。続いて、ノード名の右にある「追加」ボタンを押すことで画像のように自動読み込みの対象となります。
これでGlobalスクリプトがどのシーンやスクリプトからでも利用可能になります。
実際の使い方:グローバル変数にアクセスする方法
グローバル変数の値を取得する
他のスクリプトやシーンから、グローバル変数の値を取得するには、以下のように記述します。
1 2 3 4 5 |
extends Label func _ready(): # グローバル変数からスコアを取得 text = "スコア: " + str(Global.player_score) |
これは、スコアを取得してラベルに表示する例ですね。
適当なシーンにて、Labelノードを作りそこへ新しいスクリプトをアタッチして、上のサンプルコードを記述して実行すると先ほど作成しておいたグローバル変数の値を表示することが出来ます。
グローバルスクリプトの値を変更することで、表示される値も連動して変化するはずです。
グローバル変数の値を更新する
ゲームの進行中に、グローバル変数の値を変更することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
extends Label var counter:int = 0 func _process(_delta): counter += 1 if counter == 50: counter = 0 _on_player_scored(5) func _on_player_scored(points): # スコアを加算 Global.player_score += points text = "スコア: " + str(Global.player_score) |
先ほどのスクリプトを修正しました。process関数にてカウンターを作り、特定の値になり次第「_on_player_scored(points):」を読んでスコアを加算していく処理になります。
タイマーやコルーチンを使っても同じような事が出来るので、その辺りは開発するゲームの内容に応じてって感じですかね。
グローバル変数の注意点
- 管理が煩雑になる可能性
グローバル変数を多用すると、どこで値が変更されたか分かりにくくなる場合があります。適切にコメントを付けたり、整理しておくことが大切です。 - 変更が全シーンに影響する
グローバル変数を変更すると、ゲーム全体に影響が及ぶため、特にデバッグ時は注意が必要です。 - 用途を限定する
すべてのデータをグローバル変数で管理するのではなく、スコアや設定情報など「本当に必要なもの」だけに使うようにすると良いでしょう。