Engine
Наследует: Object
Предоставляет доступ к свойствам движка.
Описание
Синглтон Engine позволяет вам запрашивать и изменять параметры времени выполнения проекта, такие как количество кадров в секунду, масштаб времени и другие. Он также хранит информацию о текущей сборке Godot, например, текущую версию.
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
capture_script_backtraces(include_variables: bool = false) const |
|
get_architecture_name() const |
|
get_author_info() const |
|
get_copyright_info() const |
|
get_donor_info() const |
|
get_frames_per_second() const |
|
get_license_info() const |
|
get_license_text() const |
|
get_main_loop() const |
|
get_physics_frames() const |
|
get_process_frames() const |
|
get_script_language(index: int) const |
|
get_singleton(name: StringName) const |
|
get_singleton_list() const |
|
get_version_info() const |
|
get_write_movie_path() const |
|
has_singleton(name: StringName) const |
|
is_editor_hint() const |
|
is_embedded_in_editor() const |
|
is_in_physics_frame() const |
|
register_script_language(language: ScriptLanguage) |
|
void |
register_singleton(name: StringName, instance: Object) |
unregister_script_language(language: ScriptLanguage) |
|
void |
unregister_singleton(name: StringName) |
Описания свойств
Максимальное количество кадров, которые могут быть отрисованы каждую секунду (FPS). Значение 0 означает, что частота кадров не ограничена.
Ограничение FPS может быть полезным для снижения энергопотребления хост-машины, что снижает тепловыделение, шумовые выбросы и увеличивает срок службы батареи.
Если ProjectSettings.display/window/vsync/vsync_mode Enabled или Adaptive, настройка имеет приоритет, и максимальное число FPS не может превышать частоту обновления монитора.
Если ProjectSettings.display/window/vsync/vsync_mode Включено, на мониторах с включенной переменной частотой обновления (G-Sync/FreeSync) использование ограничения FPS на несколько кадров ниже частоты обновления монитора уменьшит задержку ввода, избежав при этом разрывов.
См. также physics_ticks_per_second и ProjectSettings.application/run/max_fps.
Примечание: Фактическое количество кадров в секунду может быть ниже этого значения, если ЦП или ГП не справляются с логикой проекта и рендерингом.
Примечание: Если ProjectSettings.display/window/vsync/vsync_mode Отключено, ограничение FPS до высокого значения, которое может быть последовательно достигнуто в системе, может уменьшить задержку ввода по сравнению с неограниченной частотой кадров. Поскольку это работает, гарантируя, что загрузка GPU ниже 100%, это снижение задержки эффективно только в сценариях с узким местом GPU, а не с узким местом CPU.
int max_physics_steps_per_frame = 8 🔗
Максимальное количество шагов физики, которые могут быть смоделированы в каждом отрендеренном кадре.
Примечание: Значение по умолчанию настроено так, чтобы не допустить, чтобы дорогостоящие физические симуляции бесконечно запускали еще более дорогостоящие симуляции. Однако игра будет выглядеть замедленной, если FPS рендеринга меньше, чем 1 / max_physics_steps_per_frame от physics_ticks_per_second. Это происходит, даже если delta постоянно используется в физических расчетах. Чтобы избежать этого, увеличьте max_physics_steps_per_frame, если вы увеличили physics_ticks_per_second значительно выше его значения по умолчанию.
float physics_jitter_fix = 0.5 🔗
Насколько физические тики синхронизированы с реальным временем. Если 0 или меньше, тики полностью синхронизированы. Более высокие значения заставляют игровые часы больше отклоняться от реальных часов, но они сглаживают колебания частоты кадров.
Примечание: Значение по умолчанию 0.5 должно быть достаточно хорошим для большинства случаев; значения выше 2 могут привести к тому, что игра будет реагировать на пропущенные кадры с заметной задержкой и не рекомендуются.
Примечание: При использовании пользовательского решения для интерполяции физики или в сетевой игре рекомендуется отключить исправление физического дрожания, установив это свойство в 0.
int physics_ticks_per_second = 60 🔗
Число фиксированных итераций в секунду. Это определяет частоту запуска методов моделирования физики и Node._physics_process(). Это значение обычно всегда должно быть установлено на 60 или выше, так как Godot не интерполирует шаг физики. В результате значения ниже 60 будут выглядеть прерывистыми. Это значение можно увеличить, чтобы сделать ввод более реактивным или обойти проблемы туннелирования столкновений, но имейте в виду, что это увеличит загрузку ЦП. См. также max_fps и ProjectSettings.physics/common/physics_ticks_per_second.
Примечание: Максимально можно моделировать только max_physics_steps_per_frame физических тактов на каждый отрендеренный кадр. Если для отрисовки требуется моделировать больше физических тактов на каждый отрендеренный кадр, проект будет выглядеть медленнее (даже если delta используется последовательно в физических расчетах). Поэтому рекомендуется также увеличить max_physics_steps_per_frame, если увеличение physics_ticks_per_second значительно превышает его значение по умолчанию.
bool print_error_messages = true 🔗
Если false, прекращается вывод сообщений об ошибках и предупреждений на консоль и в журнал вывода редактора. Это можно использовать для скрытия сообщений об ошибках и предупреждений во время выполнения набора модульных тестов. Это свойство эквивалентно настройке проекта ProjectSettings.application/run/disable_stderr.
Примечание: Это свойство не влияет на вкладку «Ошибки» редактора при запуске проекта из редактора.
Предупреждение: Если установлено значение false в любом месте проекта, важные сообщения об ошибках могут быть скрыты, даже если они выдаются другими скриптами. В скрипте @tool это также повлияет на сам редактор. Не сообщайте об ошибках, не убедившись, что сообщения об ошибках включены (как по умолчанию).
Если false, прекращает вывод сообщений (например, с помощью @GlobalScope.print()) на консоль, в файлы журнала и в журнал вывода редактора. Это свойство эквивалентно настройке проекта ProjectSettings.application/run/disable_stdout.
Примечание: Это не прекращает вывод ошибок или предупреждений, создаваемых скриптами, на консоль или в файлы журнала, для получения более подробной информации см. print_error_messages.
Множитель скорости, с которым обновляются игровые часы, по сравнению с реальным временем. Например, если установлено значение 2.0, игра будет работать в два раза быстрее, а если установлено значение 0.5, игра будет работать в два раза быстрее.
Это значение влияет на Timer, SceneTreeTimer и все другие симуляции, которые используют delta время (например, Node._process() и Node._physics_process()).
Примечание: Рекомендуется сохранять это свойство выше 0.0, так как в противном случае игра может вести себя непредсказуемо.
Примечание: Это не влияет на скорость воспроизведения звука. Используйте AudioServer.playback_speed_scale для регулировки скорости воспроизведения звука независимо от time_scale.
Примечание: Это не изменяет автоматически physics_ticks_per_second. При значениях выше 1.0 физическая симуляция может стать менее точной, так как каждый физический тик будет растягиваться на больший период времени двигателя. Если вы изменяете time_scale для ускорения симуляции в большой степени, рассмотрите также увеличение physics_ticks_per_second, чтобы сделать симуляцию более надежной.
Описания метода
Array[ScriptBacktrace] capture_script_backtraces(include_variables: bool = false) const 🔗
Захватывает и возвращает обратные трассировки из всех зарегистрированных языков скриптов.
По умолчанию возвращаемый ScriptBacktrace будет содержать только кадры стека в сборках редактора и отладочных сборках. Чтобы включить их также для сборок выпуска, вам необходимо включить ProjectSettings.debug/settings/gdscript/always_track_call_stacks.
Если include_variables имеет значение true, обратная трассировка также будет включать имена и значения любых глобальных переменных (например, автозагрузочных синглтонов) в точке захвата, а также локальных переменных и переменных-членов класса в каждом кадре стека. Однако это будет учитываться только при запуске игры с подключенным отладчиком, например, при запуске игры из редактора. Чтобы включить его также для экспортных сборок, вам необходимо включить ProjectSettings.debug/settings/gdscript/always_track_local_variables.
Предупреждение: Когда include_variables равен true, любые захваченные переменные могут потенциально (например, с обратными трассировками GDScript) быть их фактическими значениями, включая любые ссылки на объекты. Это означает, что сохранение такого ScriptBacktrace предотвратит освобождение этих объектов, поэтому обычно рекомендуется этого не делать.
String get_architecture_name() const 🔗
Возвращает имя архитектуры ЦП, для которой был собран двоичный файл Godot. Возможные возвращаемые значения включают "x86_64", "x86_32", "arm64", "arm32", "rv64", "ppc64", "loongarch64", "wasm64" и "wasm32".
Чтобы определить, является ли текущая сборка 64-разрядной, или тип архитектуры, не используйте имя архитектуры. Вместо этого используйте OS.has_feature() для проверки тега функции "64" или тегов, таких как "x86" или "arm". Более подробную информацию см. в документации Теги функций.
Примечание: Этот метод не возвращает имя архитектуры ЦП системы (как OS.get_processor_name()). Например, при запуске двоичного файла Godot x86_32 в системе x86_64 возвращаемое значение по-прежнему будет "x86_32".
Dictionary get_author_info() const 🔗
Возвращает информацию об авторе движка в виде Dictionary, где каждая запись представляет собой Array строк с именами известных участников движка Godot: lead_developers, founders, project_managers и developers.
Array[Dictionary] get_copyright_info() const 🔗
Возвращает Array словарей с информацией об авторских правах для каждого компонента исходного кода Godot.
Каждый Dictionary содержит идентификатор name и массив parts словарей. Он подробно описывает компонент с помощью следующих записей:
files- Array путей к файлам из исходного кода, затронутого этим компонентом;copyright- Array владельцев этого компонента;license- Лицензия, применяемая к этому компоненту (например, "Expat" или "CC-BY-4.0").
Dictionary get_donor_info() const 🔗
Возвращает Словарь категоризированных имен доноров. Каждая запись — это Array строк:
{platinum_sponsors, gold_sponsors, silver_sponsors, bronze_sponsors, mini_sponsors, gold_donors, silver_donors, bronze_donors}
Возвращает общее количество кадров, отрисованных с момента запуска движка.
Примечание: На платформах headless или если рендеринг отключен с помощью --disable-render-loop через командную строку, этот метод всегда возвращает 0. См. также get_process_frames().
float get_frames_per_second() const 🔗
Возвращает среднее количество кадров, отображаемых каждую секунду (FPS), также известное как частота кадров.
Dictionary get_license_info() const 🔗
Возвращает Dictionary лицензий, используемых Godot, и включенных сторонних компонентов. Каждая запись представляет собой имя лицензии (например, "Expat") и связанный с ней текст.
String get_license_text() const 🔗
Возвращает полный текст лицензии Godot.
MainLoop get_main_loop() const 🔗
Возвращает экземпляр MainLoop. Обычно это основной SceneTree и он такой же, как Node.get_tree().
Примечание: Тип, созданный как основной цикл, может быть изменен с помощью ProjectSettings.application/run/main_loop_type.
int get_physics_frames() const 🔗
Возвращает общее количество кадров, пройденных с момента запуска движка. Это число увеличивается каждый физический кадр. См. также get_process_frames().
Этот метод можно использовать для более редкого запуска дорогостоящей логики без использования Timer:
func _physics_process(_delta):
if Engine.get_physics_frames() % 2 == 0:
pass # Здесь дорогостоящая логика выполняется только один раз каждые 2 физических кадра.
public override void _PhysicsProcess(double delta)
{
base._PhysicsProcess(delta);
if (Engine.GetPhysicsFrames() % 2 == 0)
{
// Здесь дорогостоящая логика выполняется только один раз каждые 2 физических кадра.
}
}
float get_physics_interpolation_fraction() const 🔗
Возвращает дробь через текущий физический тик, в котором мы находимся во время рендеринга кадра. Это можно использовать для реализации интерполяции с фиксированным временным шагом.
int get_process_frames() const 🔗
Возвращает общее количество кадров, пройденных с момента запуска движка. Это число увеличивается каждый кадр процесса, независимо от того, включен ли цикл рендеринга. См. также get_frames_drawn() и get_physics_frames().
Этот метод можно использовать для менее частого запуска дорогостоящей логики без использования Timer:
func _process(_delta):
if Engine.get_process_frames() % 5 == 0:
pass # Здесь дорогостоящая логика выполняется только один раз за каждые 5 кадров обработки (рендеринга).
public override void _Process(double delta)
{
base._Process(delta);
if (Engine.GetProcessFrames() % 5 == 0)
{
// Здесь дорогостоящая логика выполняется только один раз за каждые 5 кадров обработки (рендеринга).
}
}
ScriptLanguage get_script_language(index: int) const 🔗
Возвращает экземпляр ScriptLanguage с заданным index.
int get_script_language_count() 🔗
Возвращает количество доступных языков для скриптов. Используйте с get_script_language().
Object get_singleton(name: StringName) const 🔗
Возвращает глобальный синглтон с заданным name или null, если он не существует. Часто используется для плагинов. См. также has_singleton() и get_singleton_list().
Примечание: Глобальные синглтоны — это не то же самое, что автоматически загружаемые узлы, которые настраиваются в настройках проекта.
PackedStringArray get_singleton_list() const 🔗
Возвращает список имен всех доступных глобальных синглтонов. См. также get_singleton().
Dictionary get_version_info() const 🔗
Возвращает информацию о текущей версии движка в виде Dictionary, содержащего следующие записи:
major- номер основной версии в виде целого числа;minor- номер дополнительной версии в виде целого числа;patch- номер версии исправления в виде целого числа;hex- полная версия, закодированная в виде шестнадцатеричного целого числа с одним байтом (2 шестнадцатеричные цифры) на число (см. пример ниже);status- статус (например, "beta", "rc1", "rc2", "stable" и т. д.) в виде строки;build- имя сборки (например, "custom_build") в виде строки;hash- полный хэш коммита Git в виде строки;timestamp- Содержит дату коммита Git UNIX timestamp в секундах как int или0, если недоступно;string-major,minor,patch,statusиbuildв одной строке.
Значение hex кодируется следующим образом, слева направо: один байт для основной версии, один байт для второстепенной, один байт для версии патча. Например, "3.1.12" будет 0x03010C.
Примечание: Значение hex по-прежнему является int внутренне, и его вывод даст вам его десятичное представление, которое не имеет особого смысла. Используйте шестнадцатеричные литералы для быстрого сравнения версий из кода:
if Engine.get_version_info().hex >= 0x040100:
pass # Выполните действия, характерные для версии 4.1 или более поздней.
else:
pass # Выполните действия, характерные для версий до 4.1.
if ((int)Engine.GetVersionInfo()["hex"] >= 0x040100)
{
// Выполните действия, характерные для версии 4.1 или более поздней.
}
else
{
// Выполните действия, характерные для версий до 4.1.
}
String get_write_movie_path() const 🔗
Возвращает путь к выходному файлу MovieWriter или пустую строку, если движок не был запущен в режиме Movie Maker. Путь по умолчанию можно изменить в ProjectSettings.editor/movie_writer/movie_file.
bool has_singleton(name: StringName) const 🔗
Возвращает true, если синглтон с указанным name существует в глобальной области видимости. См. также get_singleton().
print(Engine.has_singleton("OS")) # Prints true
print(Engine.has_singleton("Engine")) # Prints true
print(Engine.has_singleton("AudioServer")) # Prints true
print(Engine.has_singleton("Unknown")) # Prints false
GD.Print(Engine.HasSingleton("OS")); // Prints True
GD.Print(Engine.HasSingleton("Engine")); // Prints True
GD.Print(Engine.HasSingleton("AudioServer")); // Prints True
GD.Print(Engine.HasSingleton("Unknown")); // Prints False
Примечание: Глобальные синглтоны — это не то же самое, что автоматически загружаемые узлы, которые настраиваются в настройках проекта.
Возвращает true, если скрипт в данный момент выполняется внутри редактора, в противном случае возвращает false. Это полезно для скриптов @tool для условной отрисовки помощников редактора или предотвращения случайного запуска «игрового» кода, который может повлиять на состояние сцены в редакторе:
if Engine.is_editor_hint():
draw_gizmos()
else:
simulate_physics()
if (Engine.IsEditorHint())
DrawGizmos();
else
SimulatePhysics();
См. Запуск кода в редакторе в документации для получения дополнительной информации.
Примечание: Чтобы определить, запущен ли скрипт в редакторе build (например, при нажатии F5), вместо этого используйте OS.has_feature() с аргументом "editor". OS.has_feature("editor") оценивается как true как при запуске скрипта в редакторе, так и при запуске проекта из редактора, но возвращает false при запуске из экспортированного проекта.
bool is_embedded_in_editor() const 🔗
Возвращает true, если движок запущен встроенным в редактор. Это полезно для предотвращения попыток обновления режима окна или флагов окна, которые не поддерживаются при запуске проекта, встроенного в редактор.
bool is_in_physics_frame() const 🔗
Возвращает true, если движок находится внутри фиксированного шага физического процесса основного цикла.
func _enter_tree():
# В зависимости от того, когда узел добавляется в дерево,
# печатает либо "true" или "false".
print(Engine.is_in_physics_frame())
func _process(delta):
print(Engine.is_in_physics_frame()) # Prints false
func _physics_process(delta):
print(Engine.is_in_physics_frame()) # Prints true
Error register_script_language(language: ScriptLanguage) 🔗
Регистрирует экземпляр ScriptLanguage, который будет доступен с ScriptServer.
Возвращает:
@GlobalScope.OK об успехе;
@GlobalScope.ERR_UNAVAILABLE если
ScriptServerдостиг лимита и не может зарегистрировать ни одного нового языка;@GlobalScope.ERR_ALREADY_EXISTS если
ScriptServerуже содержит язык с похожим расширением/названием/типом.
void register_singleton(name: StringName, instance: Object) 🔗
Регистрирует заданный Object instance как синглтон, доступный глобально под name. Полезно для плагинов.
Error unregister_script_language(language: ScriptLanguage) 🔗
Отменяет регистрацию экземпляра ScriptLanguage из ScriptServer.
Возвращает:
@GlobalScope.OK при успешном выполнении;
@GlobalScope.ERR_DOES_NOT_EXIST, если язык не зарегистрирован в
ScriptServer.
void unregister_singleton(name: StringName) 🔗
Удаляет синглтон, зарегистрированный под name. Объект синглтон не освобожден. Работает только с определенными пользователем синглтонами, зарегистрированными с помощью register_singleton().