Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
ゲームとプロセスのポーズ
はじめに
ほとんどのゲームでは、休憩を取ったりオプションを変更したりするなど、何か別のことを行うために、あるタイミングでゲームを中断できることが望ましいです。何をポーズできるか (何がポーズできないか) をきめ細かく制御するのは多大な作業であるため、Godotにはポーズのためのシンプルなフレームワークが提供されています。
ポーズの仕組み
ゲームをポーズするには、ポーズ状態を設定する必要があります。これは SceneTree.paused プロパティに true にセットすることで行われます。
get_tree().paused = true
GetTree().Paused = true;
これを行うと2つのことが起こります。まず2Dおよび3D物理演算がすべてのノードが停止されます。次に特定のノードの動作は、プロセスモードに応じて停止または開始されます。
注釈
物理サーバーはゲームのポーズ中に set_active メソッドを使用してアクティブにすることができます。
プロセスモード
Godotの各ノードには、どのように処理するかを定義する「プロセス モード」があります。これはインスペクタのノードの Node プロパティで変更できます。
コードを使用してプロパティを変更することもできます:
func _ready():
process_mode = Node.PROCESS_MODE_PAUSABLE
public override void _Ready()
{
ProcessMode = Node.ProcessModeEnum.Pausable;
}
各モードに応じたノードの振る舞いは以下の通りです:
Inherit: 親や祖先などの状態に応じたプロセス。最初の親(ルート)は何も継承していません。
Pausable: ゲームが一時停止されていない場合にのみ、ノード (およびInheritモードの子) を処理します。
WhenPaused: ゲームがポーズされているとき*のみ*、ノード (およびInheritモードの子) を処理します。
Always: 常にノード (およびInheritモードの子) を処理します。ポーズしているかどうかに関係なく、このノードは処理を行います。
Disabled: ノード (およびInheritモードの子) は常に処理されません。
デフォルトでは、すべてのノードは "Inherit" 状態になります。つまり親ノードに設定されている同じプロパティに応じて処理する (または処理しない) ことを意味します。親が "Inherit" に設定されている場合、祖父母がチェックされます。最終的に祖先に状態が見つからない場合、SceneTreeのポーズ状態が使用されます。これはデフォルトではゲームがポーズすると、すべてのノードが停止することを意味します。
_process 、 _physics_process 、 _input 、 _input_event 関数は呼び出されません。ただし関数のスクリプトが現在処理されていないノードにアタッチされている場合でも、シグナルは引き続き機能しており、接続されている関数が実行されます。
アニメーションノードは現在のアニメーションをポーズし、オーディオノードも現在のオーディオ ストリームをポーズし、パーティクルもポーズします。ゲームのポーズが解除されると、これらは自動的に再開されます。
ゲームのポーズ中にノードが処理している場合でも、デフォルトでは物理演算が**機能しない**ことに注意することが重要です。前述したように、これは物理サーバーがオフになっているためです。物理サーバーは、ゲームのポーズ中に set_active メソッドを使用してアクティブにすることができます。