Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
アイドル処理と物理処理¶
Games run in a loop. Each frame, you need to update the state of your game world before drawing it on screen. Godot provides two virtual methods in the Node class to do so: Node._process() and Node._physics_process(). If you define either or both in a script, the engine will call them automatically.
2種類の処理が用意されています:
アイドル処理 を使うと、ノードを毎フレーム更新するようなコードを、可能な限り頻繁に実行することができます。
物理処理 は固定レートで行われ、デフォルトでは1秒間に60回です。これはゲームの実際のフレームレートとは無関係で、物理がスムーズに行われるようにします。物理エンジンが関係するもの、たとえば、環境と衝突する体を動かすような場合に使用するとよいでしょう。
スクリプトで _process()
メソッドを定義することで、アイドル処理を有効にすることができます。また、 Node.set_process() を呼び出すことで、アイドル処理をオフにしたりオンに戻したりすることができます。
エンジンはフレームを描画するたびに以下のメソッドを呼び出します:
func _process(delta):
# Do something...
pass
public override void _Process(double delta)
{
// Do something...
}
エンジンが _process()
を呼び出す頻度は、アプリケーションのフレームレートに依存し、時間やデバイスによって異なることを覚えておいてください。
この関数の delta
パラメーターは、 _process()
が前回呼び出されてからの経過時間 (秒) です。このパラメーターは、フレームレートに依存しない計算を行うために使用します。例えば、移動するオブジェクトをアニメーションさせるには、常に速度の値に delta
を乗じる必要があります。
物理処理は、同様の仮想関数 _physics_process()
で動作します。これはゲーム世界に衝突判定を持つキャラクターの制御など、各物理ステップの前に実行する必要がある処理に使用します。前述のとおり、 _physics_process()
は物理的な相互作用を安定させるために、可能な限り固定時間間隔(デフォルトでは毎秒60回)で呼び出されます。この間隔は、プロジェクト設定の Physics -> Common-> Physics Fps で変更できます。
The engine calls this method before every physics step:
func _physics_process(delta):
# Do something...
pass
public override void _PhysicsProcess(double delta)
{
// Do something...
}
一方、_process()
関数は物理処理と同期されません。そのレートは一定ではなく、ハードウェアとゲームの最適化に依存します。シングルスレッドのゲームでは、物理ステップの後に実行されます。
Labelノードが1つあるシーンを作成し、以下のスクリプトをアタッチすると、_process()
関数の動作を確認できます:
extends Label
var time = 0
func _process(delta):
time += delta
text = str(time) # 'text' is a built-in Label property.
using Godot;
public partial class CustomLabel : Label
{
private double _time;
public override void _Process(double delta)
{
_time += delta;
Text = _time.ToString(); // 'Text' is a built-in Label property.
}
}
シーンを実行すると、カウンターが各フレームごとに増加しているのが確認できます。