概要
GodotのProcess Modeは、get_tree().paused = true
時の各ノードの動作を制御する機能です。NPCとの会話中は背景を止めつつ、ダイアロ グだけは操作可能にするといった制御が可能になります。
実際のゲーム開発で、この機能を知らなかった時は、各オブジェクトに個別にフラグを立てて制御していて、コードが複雑になってしまった経験があります。Process Modeを使うことで、シンプルにポーズ機能を実装できるようになりました。

Process Modeの種類
1. Pausable (停止可能) - デフォルト
- ポーズ時に
_process
や_physics_process
が停止 - プレイヤー、敵、ゲーム世界のオブジェクトに適用
2. Always (常に実行)
- ポーズ状態を無視して常に動作
- 会話中のNPC、UI、BGMなどに使用
3. When Paused (ポーズ中のみ実行)
- ポーズ中だけ動作
- ポーズメニュー、「PAUSE」表示などに使用
実装例:ダイアログ表示中のポーズ制御
初めてNPCとの会話システムを作った時、「会話中にプレイヤーが動いてしまう!」という問題に直面しました。最初は会話中フラグで制御しようとしましたが、Process Modeを使えば一行でゲーム全体を止められることに気づいた時は感動しました。

# NPC.gd
# インスペ クターでProcess Modeを "Always" に設定
func _process(delta):
if Input.is_action_just_pressed("interact") and can_talk:
if is_dialog_active():
# ダイアログを閉じてポーズ解除
close_dialog()
get_tree().paused = false
else:
# ダイアログを開いてゲームをポーズ
open_dialog()
get_tree().paused = true
よくある使用例
ポーズメニューの実装
# PauseMenu.gd (Process Mode: When Paused)
extends Control
func _ready():
process_mode = Node.PROCESS_MODE_WHEN_PAUSED
visible = false
func _input(event):
if event.is_action_pressed("pause"):
visible = !visible
get_tree().paused = visible
BGMコントローラー
# BGMController.gd (Process Mode: Always)
extends AudioStreamPlayer
func _ready():
process_mode = Node.PROCESS_MODE_ALWAYS
# ポーズ中もBGMは再生し続ける
設定方法
- インスペクター: ノードを選択 → Node → Process → Mode
- コード:
process_mode
プロパティを使用func _ready(): process_mode = Node.PROCESS_MODE_ALWAYS
注意点
- 子ノードは親ノードのProcess Modeを継承する
- UIノード全体を「Always」に設定すれば、子要素も自動的にポーズ中も動作する
- ポーズ中の入力処理には注意(意図しない操作を防ぐ)
実装して学んだこと
Process Modeを使いこなせるようになって、ゲームの一時停止機能がとても簡単に実装できるようになりました。特に、会話システムやメニュー画面の実装で重宝しています。最初は「どのノードをAlwaysにすべきか」で迷いましたが、基本的にUIとBGM関連のノードをAlwaysにするという原則を決めてからは、スムーズに実装できるようになりました。