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 предусмотрена простая структура для паузы.
Как работает пауза
Чтобы приостановить игру, необходимо установить состояние паузы. Это делается путём присвоения значения true свойству SceneTree.paused:
get_tree().paused = true
GetTree().Paused = true;
Это приведёт к двум последствиям. Во-первых, 2D- и 3D-физика будет остановлена для всех узлов. Во-вторых, поведение определённых узлов будет остановлено или возобновлено в зависимости от их режима обработки.
Примечание
Физические серверы можно сделать активными, когда игра приостановлена, с помощью их методов set_active.
Режимы процесса
У каждого узла в Godot есть "Process Mode", который определяет, когда он обрабатывается. Его можно найти и изменить в свойствах узла Node в инспекторе.
Вы также можете изменить свойство с помощью кода:
func _ready():
process_mode = Node.PROCESS_MODE_PAUSABLE
public override void _Ready()
{
ProcessMode = Node.ProcessModeEnum.Pausable;
}
Вот что каждый режим предписывает узлу делать:
Inherit: Процесс в зависимости от состояния родителя, бабушки или дедушки и т. д. Первый родитель, который имеет состояние, отличное от "Inherit (Наследовать)".
С возможностью паузы: обрабатывать узел (и его дочерние элементы в режиме наследования) только тогда, когда игра не приостановлена.
WhenPaused: обрабатывать узел (и его дочерние элементы в режиме наследования) только тогда, когда игра приостановлена.
Всегда: Обрабатывать узел (и его дочерние узлы в режиме наследования) в любом случае. Независимо от паузы, этот узел будет обрабатываться.
Отключено: Узел (и его дочерние элементы в режиме наследования) не будут обрабатываться вообще.
По умолчанию все узлы имеют это свойство в состоянии "Inherit". Если родительский узел имеет значение "Inherit", то будет проверен прародительский узел и так далее. Если состояние не найдено ни в одном из прародителей, используется состояние паузы в SceneTree. Это означает, что по умолчанию при паузе игры все узлы будут приостановлены. Когда узел прекращает обработку, происходит несколько событий.
Функции _process, _physics_process, _input и _input_event вызываться не будут. Однако сигналы продолжают работать и вызывают запуск связанной с ними функции, даже если скрипт этой функции прикреплён к узлу, который в данный момент не обрабатывается.
Узлы анимации приостановят текущую анимацию, узлы звука приостановят текущий аудиопоток, а частицы также приостановятся. Они автоматически возобновятся после снятия игры с паузы.
Важно отметить, что даже если узел обрабатывает данные во время паузы игры, физика по умолчанию НЕ будет работать. Как уже упоминалось, это связано с тем, что физические серверы отключены. Физические серверы можно активировать во время паузы игры с помощью их методов set_active.