ゲームをポーズした時にシングルトンのプログラムも止まってしまいます。
この記事では、シングルトンのプログラムがポーズしても止まらないようにする方法を解説します。
前提知識
シングルトンの設定方法は以下の記事がわかりやすいです。

環境
- Godot4.5
問題点
ポーズ画面やBGM管理などのずっと動き続けて欲しいシングルトンが、ゲーム全体をポーズさせると止まってしまいます。
シングルトンがシーンの場合はインスペクターから、シーンのProcess Modeを”Always”に設定すればポーズ中も動いてくれます。
しかし、シングルトンがプログラム単体の場合はインスペクターにProcess Modeがないので設定できません。

例えば、_process()関数内でゲームの累計起動時間を計っている場合にポーズで止まっている時間は計測できません。
設定方法
問題を解決するための2つの方法があります。
1.シングルトンに設定するときにプログラム(.gd)ではなく、プログラムをアタッチしたノードを設定する
まず、空のNodeを作成します。
次に、NodeのProcess ModeをAlwaysにし、Nodeにシングルトンにしたいプログラムをアタッチします。

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

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”になっている。

まとめ
ポーズ中もプログラムを止めないようにするには、
NodeのProcess Modeを”Always”にするか、
プログラムの_ready関数内に process_mode = Node.PROCESS_MODE_ALWAYS を記述すればよい。💯

