概要
ゲーム開発において、ポーズ機能はプレイヤーに一息つかせたり、設定を変更させたりするために不可欠な要素です。Godotには、このポーズ機能を驚くほど簡単に、そして柔軟に実装するための仕組みが用意されています。その中心となるのが「Process Mode」です。
この記事では、Godotのポーズ機能の基本と、それを支えるProcess Modeの概念について、初心者にも分かりやすく解説します。

ゲームを一時停止させる基本
Godotでゲーム全体を一時停止させるのは、たった1行のコードで実現できます。
# ゲームをポーズする
get_tree().paused = true
# ゲームを再開する
get_tree().paused = false
get_tree()は現在のシーンツリーを取得し、そのpausedプロパティをtrueにすることで、Godotは物理演算を停止し、ほとんどのノードの処理を中断します。しかし、「ほとんど」というのが重要なポイントです。どのノードがポーズの影響を受けるかを細かく制御するのがProcess Modeの役割です。
Process Modeとは?
Process Modeは、各ノードがゲームのポーズ状態に応じてどのように振る舞うかを決定する設定です。インスペクタのNodeプロパティから設定できます。

| モード (Mode) | 説明 |
|---|---|
| Inherit | (継承) 親ノードの設定に従います。これがデフォルトです。 |
| Pausable | (ポーズ可能) ゲームがポーズされると、処理(_processや_physics_processなど)を停止します。 |
| WhenPaused | (ポーズ時) ゲームがポーズされている間だけ 処理を行います。ポーズメニューに最適です。 |
| Always | (常時) ゲームのポーズ状態に関わらず、常に処理を続けます。 |
| Disabled | (無効) 常に処理を行いません。一時的にノードを無効化したい場合に使えます。 |
実践例:ポーズメニューを作る
Process Modeの最も一般的な使い方がポーズメニューです。ゲームが止まっている間も、メニュー内のボタンは操作できなければなりません。
1. ポーズメニューシーンを作成
Controlノードをルートとし、その下に「再開」や「終了」のButtonノードを配置して、ポーズメニュー用のシーン(例: PauseMenu.tscn)を作成します。
2. Process Modeを設定
ポーズメニューシーンのルートノード(Controlノード)を選択し、インスペクタでProcess ModeをWhenPausedに変更します。これにより、このメニューはゲームがポーズされたときにだけ表示・操作できるようになります。
3. ポーズ処理を実装
プレイヤーやメインシーンなど、入力を受け取るスクリプトに以下を記述します。
# PauseMenu.tscnをインスペクタから設定しておく
@export var pause_menu_scene: PackedScene
var pause_menu_instance
func _unhandled_input(event):
if event.is_action_just_pressed("pause_game"): # "pause_game"はInputMapで設定
if get_tree().paused:
# ゲーム再開
get_tree().paused = false
if pause_menu_instance:
pause_menu_instance.queue_free() # メニューを削除
else:
# ゲームをポーズ
get_tree().paused = true
pause_menu_instance = pause_menu_scene.instantiate()
add_child(pause_menu_instance) # メニューをシーンに追加
このコードでは、ポーズボタンが押されるとget_tree().pausedの状態を切り替え、ポーズメニューのインスタンスを生成・破棄しています。Process ModeがWhenPausedに設定されているため、メニューはポーズ中にのみ機能します。
まとめ
get_tree().pausedとProcess Modeを組み合わせることで、Godotでは非常に直感的にポーズ機能を実装できます。キャラクターやエフェクトはPausable(デフォルト)のままに、UIだけをWhenPausedに設定する、という使い分けを意識するだけで、あなたのゲームはよりプロフェッショナルな挙動になります。