Idle и Physics Processing
Игры работают в цикле. В каждом кадре необходимо обновлять состояние игрового мира перед его отображением на экране. Godot предоставляет для этого два виртуальных метода в классе Node: Node._process() и Node._physics_process(). Если вы определите один или оба метода в скрипте, движок вызовет их автоматически.
Существует два типа обработки, которые доступны вам:
Idle processing позволяет вам запускать код, который обновляет узел каждый кадр, так часто, как это возможно.
Physics processing происходит с фиксированной скоростью, 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() выполняется с фиксированными временными интервалами, насколько это возможно, чтобы сохранить стабильность физических взаимодействий. Вы можете изменить интервал между шагами физики в Настройках проекта, в разделе Physics -> Common -> Physics Fps По умолчанию он установлен на 60 раз в секунду.
Движок вызывает этот метод перед каждым шагом физики:
func _physics_process(delta):
# Do something...
pass
public override void _PhysicsProcess(double delta)
{
// Do something...
}
Функция _process() не синхронизирована с физикой. Её скорость зависит от аппаратного обеспечения и оптимизации игры. Она также выполняется после этапа обработки физики в однопоточных играх.
Вы можете увидеть функцию _process() в работе, создав сцену с одним узлом Label и прикрепив к нему следующий скрипт:
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.
}
}
При запуске сцены вы должны увидеть, как счетчик увеличивается с каждым кадром.