Idle and Physics Processing
Node._process() and Node._physics_process(). If you define either or both in a script, the engine will call them automatically. There are two types of processing available to you:
- Idle processing allows you to run code that updates a node every frame, as often as possible.
- Physics processing happens at a fixed rate, 60 times per second by default. This is independent of your game’s actual framerate, and keeps physics running smoothly. You should use it for anything that involves the physics engine, like moving a body that collides with the environment.
_process()method in a script. You can turn it off and back on by calling Node.set_process(). The engine calls this method every time it draws a frame: GDScript C#func _process(delta): # Do something... pass
public override void _Process(float delta){ // Do something...}
_process()depends on your application’s framerate, which varies over time and across devices.deltaparameter is the time elapsed in seconds since the previous call to_process(). Use this parameter to make calculations independent of the framerate. For example, you should always multiply a speed value bydeltato animate a moving object._physics_process(). Use it for calculations that must happen before each physics step, like moving a character that collides with the game world. As mentioned above,_physics_process()runs at fixed time intervals as much as possible to keep the physics interactions stable. You can change the interval between physics steps in the Project Settings, under Physics -> Common -> Physics Fps. By default, it’s set to run 60 times per second. The engine calls this method every time it draws a frame: GDScript C#func _physics_process(delta): # Do something... pass
public override void _PhysicsProcess(float delta){ // Do something...}
_process()is not synchronized with physics. Its rate depends on hardware and game optimization. It also runs after the physics step in single-threaded games._process()function at work by creating a scene with a single Label node, with the following script attached to it: GDScript C#extends Labelvar time = 0func _process(delta): time += delta text = str(time) # 'text' is a built-in Label property.
When you run the scene, you should see a counter increasing each frame.public class CustomLabel : Label{ private float _time; public override void _Process(float delta) { _time += delta; Text = _time.ToString(); // 'Text' is a built-in Label property. }}
