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

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

前提知識

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

【Godot Engine 4】Godot Engineで2Dゲームを作るときに知っておきたい基本的な機能

環境

  • Godot4.5

問題点

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

シングルトンがシーンの場合はインスペクターから、シーンのProcess Modeを”Always”に設定すればポーズ中も動いてくれます。
しかし、シングルトンがプログラム単体の場合はインスペクターにProcess Modeがないので設定できません。

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

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

設定方法

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

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

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

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

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

画像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”で動いている

まとめ

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

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