【Godot4】シングルトンをAlwaysで動作させる-ポーズ中もプログラムを止めない2つの方法

2026-01-10

ゲームをポーズした時にシングルトンのプログラムも止まってしまいます。

この記事では、シングルトンのプログラムがポーズしても止まらないようにする方法を解説します。

前提知識

シングルトンの設定方法は以下の記事がわかりやすいです。

環境

  • Godot4.5
  • GDScript

問題点

ポーズ画面やBGM管理などのずっと動き続けて欲しいシングルトンが、ゲーム全体をポーズさせると止まってしまいます。

シングルトンがシーンの場合はインスペクターから、シーンのProcess Modeを”Always”に設定すればポーズ中も動いてくれます。

しかし、シングルトンがプログラム単体の場合はインスペクターにProcess Modeがないので設定できません。

画像1 インスペクターにProcess Modeが存在しない
画像1 インスペクターにProcess Modeが存在しない

例えば、_process()関数内でゲームの累計起動時間を計っている場合にポーズで止まっている時間は計測できません。

設定方法

問題を解決するための2つの方法があります。

1.シングルトンに設定するときにプログラム(.gd)ではなく、プログラムをアタッチしたノードを設定する

まず、空のNodeを作成します。

次に、NodeのProcess ModeをAlwaysにし、Nodeにシングルトンにしたいプログラムをアタッチします。

画像2 NodeのProcess Modeを”Always”に、プログラムをアタッチ
画像2 NodeのProcess Modeを”Always”に、プログラムをアタッチ

最後に、作成したNodeをシングルトンに設定すれば”Always”で動作するようになります。

画像3 作成したNodeをシングルトンに設定
画像3 作成したNodeをシングルトンに設定

2.プログラムの_ready関数内に process_mode = Node.PROCESS_MODE_ALWAYS を記述する

実はプログラム単体をシングルトンにしても、実行時にはNodeとしてシーンツリーに追加されます。

以下のコードを記述することでProcess Modeを”Always”にすることができます。

func _ready() -> void:
    process_mode = Node.PROCESS_MODE_ALWAYS

下の画像ではプログラム(.gd)をシングルトンに追加したが、Nodeとして扱われています。

ちゃんとProcess Modeが”Always”になっている。

画像4 シングルトンが”Always”で動いている
画像4 シングルトンが”Always”で動いている

まとめ

ポーズ中もプログラムを止めないようにするには、

NodeのProcess Modeを”Always”にするか、 プログラムの_ready関数内に process_mode = Node.PROCESS_MODE_ALWAYS

を記述すればよい。💯

Godotゲーム開発ブログ