【Godot】Process Modeによるポーズ機能の制御

作成: 2025-06-20最終更新: 2025-12-06

NodeのProcess Modeの仕組みと設定方法。ポーズ機能やダイアログ表示での活用例

概要

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

この記事では、Godotのポーズ機能の基本と、それを支えるProcess Modeの概念について、初心者にも分かりやすく解説します。

Process Mode設定画面

ゲームを一時停止させる基本

Godotでゲーム全体を一時停止させるのは、たった1行のコードで実現できます。

# ゲームをポーズする
get_tree().paused = true

# ゲームを再開する
get_tree().paused = false

get_tree()は現在のシーンツリーを取得し、そのpausedプロパティをtrueにすることで、Godotは物理演算を停止し、ほとんどのノードの処理を中断します。しかし、「ほとんど」というのが重要なポイントです。どのノードがポーズの影響を受けるかを細かく制御するのがProcess Modeの役割です。

Process Modeとは?

Process Modeは、各ノードがゲームのポーズ状態に応じてどのように振る舞うかを決定する設定です。インスペクタのNodeプロパティから設定できます。

Process Mode設定画面
モード (Mode)説明
Inherit(継承) 親ノードの設定に従います。これがデフォルトです。
Pausable(ポーズ可能) ゲームがポーズされると、処理(_process_physics_processなど)を停止します。
WhenPaused(ポーズ時) ゲームがポーズされている間だけ 処理を行います。ポーズメニューに最適です。
Always(常時) ゲームのポーズ状態に関わらず、常に処理を続けます。
Disabled(無効) 常に処理を行いません。一時的にノードを無効化したい場合に使えます。

実践例:ポーズメニューを作る

Process Modeの最も一般的な使い方がポーズメニューです。ゲームが止まっている間も、メニュー内のボタンは操作できなければなりません。

1. ポーズメニューシーンを作成

Controlノードをルートとし、その下に「再開」や「終了」のButtonノードを配置して、ポーズメニュー用のシーン(例: PauseMenu.tscn)を作成します。

2. Process Modeを設定

ポーズメニューシーンのルートノード(Controlノード)を選択し、インスペクタでProcess ModeWhenPausedに変更します。これにより、このメニューはゲームがポーズされたときにだけ表示・操作できるようになります。

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 ModeWhenPausedに設定されているため、メニューはポーズ中にのみ機能します。

まとめ

get_tree().pausedProcess Modeを組み合わせることで、Godotでは非常に直感的にポーズ機能を実装できます。キャラクターやエフェクトはPausable(デフォルト)のままに、UIだけをWhenPausedに設定する、という使い分けを意識するだけで、あなたのゲームはよりプロフェッショナルな挙動になります。