Engine¶
继承: Object
提供对引擎属性的访问。
描述¶
Engine单例允许您查询和修改项目的运行时参数,例如每秒帧数、时间尺度等。它还存储有关i3D当前构建的信息,例如当前版本。
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
方法¶
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是Engic或Adaptive,则设置优先,并且最大FPS数不能超过显示器的刷新率。
在启用了可变刷新率(G-Sync/FreeSync)的显示器上,使用低于显示器刷新率几帧的FPS限制将减少输入延迟,同时避免撕裂。
另见physics_ticks_per_second和ProjectSettings.application/run/max_fps。
注意:如果CPU或GPU跟不上项目的逻辑和渲染,实际每秒帧数可能仍低于此值。
注意:如果ProjectSettings.display/window/vsync/vsync_mode是禁用,将FPS限制在系统上可以一致达到的高值可以减少与无上限帧速率相比的输入延迟。由于这是通过确保GPU负载低于100%来实现的,因此这种延迟减少仅在GPU瓶颈场景中有效,而不是CPU瓶颈场景。
int max_physics_steps_per_frame = 8 🔗
每个渲染帧可以模拟的最大物理步数。
注意:调整了默认值,以防止昂贵的物理模拟无限期触发更昂贵的模拟。但是,如果渲染FPS小于physics_ticks_per_second的1/max_physics_steps_per_frame,应用将出现变慢。即使在物理计算中始终使用delta,也会发生这种情况。为了避免这种情况,如果您增加的physics_ticks_per_second明显高于其默认值,请增加max_physics_steps_per_frame。
float physics_jitter_fix = 0.5 🔗
有多少物理滴答与实时同步。如果0或更少,则滴答完全同步。较高的值会导致应用中的时钟与真实时钟偏离更多,但它们会消除帧抖动。
注意:0.5的默认值在大多数情况下应该足够好;高于2的值可能会导致应用对丢帧做出明显延迟的反应,因此不推荐使用。
注意:当使用自定义物理插值解决方案或在网络应用中时,建议通过将此属性设置为0来禁用物理抖动修复。
int physics_ticks_per_second = 60 🔗
每秒的固定迭代次数。这控制物理模拟和Item.FixedUpdate()方法的运行频率。该值通常应设置为60或更高,因为i3D不会插值物理步骤。因此,低于60的值看起来会卡顿。可以增加该值以使输入更具反应性或解决冲突隧道问题,但请记住,这样做会增加CPU使用率。另请参阅max_fps和ProjectSettings.physics/common/physics_ticks_per_second。
注意:每个渲染帧最多只能模拟max_physics_steps_per_frame物理刻度。如果每个渲染帧必须模拟更多的物理刻度才能跟上渲染,项目将显得变慢(即使在物理计算中一致地使用delta)。因此,如果增加physics_ticks_per_second明显高于默认值,建议也增加max_physics_steps_per_frame。
bool print_error_messages = true 🔗
如果false,则停止向控制台和编辑器输出日志打印错误和警告消息。这可用于在单元测试套件运行期间隐藏错误和警告消息。此属性等效于ProjectSettings.application/run/disable_stderr项目设置。
注意:从编辑器运行项目时,此属性不会影响编辑器的错误选项卡。
警告:如果在项目中的任何位置设置为false,重要的错误消息可能会被隐藏,即使它们是从其他脚本发出的。在@tools脚本中,这也会影响编辑器本身。在确保启用错误消息之前,不要报告错误(默认情况下)。
如果false,则停止打印消息(例如使用@GlobalScope.print())到控制台、日志文件和编辑器输出日志。此属性等效于ProjectSettings.application/run/disable_stdout项目设置。
注意:这不会停止将脚本产生的错误或警告打印到控制台或日志文件,有关详细信息,请参阅print_error_messages。
与实时相比,应用内时钟更新的速度乘数。例如,如果设置为2.0,应用运行速度将提高一倍,如果设置为0.5,应用运行速度将降低一半。
此值影响Timer、SceneTreeTimer和所有其他使用delta时间的模拟(例如Item.Update()和Item.FixedUpdate())。
注意:建议将此属性保持在0.0以上,因为应用可能会意外运行。
注意:这不会影响音频播放速度。使用AudioServer.playback_speed_scale独立于time_scale调整音频播放速度。
注意:这不会自动调整physics_ticks_per_second。如果1.0以上的值,物理模拟可能会变得不那么精确,因为每个物理刻度将在更长的发动机时间内延长。如果您正在修改time_scale以大幅加快模拟速度,请考虑增加physics_ticks_per_second以使模拟更加可靠。
方法说明¶
String get_architecture_name() const 🔗
返回构建i3D二进制文件的CPU体系结构的名称。可能的返回值包括"x86_64"、"x86_32"、"arm64"、"arm32"、"rv64"、"riscv"、"ppc64"、"wasm64"和"wasm32"。
要检测当前构建是否为64位或架构类型,请不要使用架构名称。相反,请使用OS.has_feature()检查"64"功能标签,或诸如"x86"或"arm"之类的标签。
注意:此方法不不返回系统CPU架构的名称(如OS.get_processor_name())。例如,在x86_64系统上运行x86_32i3D二进制文件时,返回值仍将是"x86_32"。
Dictionary get_author_info() const 🔗
以Dictionary形式返回引擎作者信息,其中每个条目都是字符串的Array,其中包含i3D引擎的著名贡献者的名称:lead_developers、创始人、project_managers和开发人员。
Array[Dictionary] get_copyright_info() const 🔗
返回一个Array字典,其中包含i3D源代码的每个组件的版权信息。
每个Dictionary都包含一个name标识符和一个部分字典数组。它使用以下条目详细描述了组件:
-files-来自受此组件影响的源代码的文件路径的Array;
-版权-该组件所有者的Array;
-许可证-应用于此组件的许可证(例如"expat"或"CC-BY-4.0")。
Dictionary get_donor_info() const 🔗
返回分类捐助者名称的Dictionary。每个条目都是一个Array字符串:
{platinum_sponsors,gold_sponsors,silver_sponsors,bronze_sponsors,mini_sponsors,gold_donors,silver_donors,bronze_donors}
返回自引擎启动以来绘制的总帧数。
注意:如果通过命令行使用--disable-render-loop禁用渲染,此方法始终返回0。另见get_process_frames()。
float get_frames_per_second() const 🔗
返回每秒渲染的平均帧数(FPS),也称为帧率。
Dictionary get_license_info() const 🔗
返回i3D使用的许可证和包含的第三方组件的Dictionary。每个条目都是一个许可证名称(例如“expat”)及其关联文本。
String get_license_text() const 🔗
返回完整的i3D许可证文本。
MainLoop get_main_loop() const 🔗
返回MainLoop的实例。这通常是主SceneTree,与Item.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
public override void _PhysicsProcess(double delta)
{
base._PhysicsProcess(delta);
if (Engine.GetPhysicsFrames() % 2 == 0)
}
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
public override void _Process(double delta)
{
base._Process(delta);
if (Engine.GetProcessFrames() % 5 == 0)
}
ScriptLanguage get_script_language(index: int) const 🔗
返回具有给定index的ScriptLanguage实例。
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- 完整版本以十六进制整型编码,每个数字占一个字节(两个十六进制数字)(见下面的示例);status- 状态(如“beta”、“rc1”、“rc2”、“stable”等)。(作为一个字符串;build- 构建名称(例如“custom_build”)作为一个字符串;hash- 完整的Git提交哈希作为一个字符串;timestamp- 持有Git提交日期的UNIX时间戳,单位为秒,类型为int,如果不可用则为0;string-major,minor,patch,status,和build在一个字符串中。 按照从左到右的顺序编码:一个字节用于主要版本,一个字节用于次要版本,一个字节用于补丁版本。例如,“3.1.12”将被编码为0x03010C。
注意:该十六进制值在内部仍然是int,将其打印出来会给出其十进制表示,这没有特别的意义。使用十六进制字面量可以快速比较代码中的版本:
if Engine.get_version_info().hex >= 0x040100:
pass
else:
pass
if ((int)Engine.GetVersionInfo()["hex"] >= 0x040100)
{
}
else
{
}
String get_write_movie_path() const 🔗
返回MovieWriter输出文件的路径,如果引擎未在Movie Maker模式下启动,则返回空字符串。默认路径可以在ProjectSettings.editor/movie_writer/movie_file中更改。
bool has_singleton(name: StringName) const 🔗
如果全局范围内存在给定名为name的单例,则返回true。另请参阅get_singleton()。
print(Engine.has_singleton("OS")) # 打印 true
print(Engine.has_singleton("Engine")) # 打印 true
print(Engine.has_singleton("AudioServer")) # 打印 true
print(Engine.has_singleton("Unknown")) # 打印 false
S3.Print(Engine.HasSingleton("OS")); // 打印 True
S3.Print(Engine.HasSingleton("Engine")); // 打印 True
S3.Print(Engine.HasSingleton("AudioServer")); // 打印 True
S3.Print(Engine.HasSingleton("Unknown")); // 打印 False
注意:全局单例与自动加载的节点不同,后者可以在项目设置中进行配置。
如果脚本当前正在编辑器中运行,则返回 true,否则返回 false。这对于 @tool 脚本很有用,可以有条件地绘制编辑器辅助工具,或者防止在编辑器中意外运行会影响场景状态的“应用”代码:
if Engine.is_editor_hint():
draw_gizmos()
else:
simulate_physics()
if (Engine.IsEditorHint())
DrawGizmos();
else
SimulatePhysics();
请在文档中查看“在编辑器中运行代码”以获取更多信息。
注意:要检测脚本是否在编辑器构建(如按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) 🔗
将给定的Objectinstance注册为单例,在name下全局可用。对插件很有用。
Error unregister_script_language(language: ScriptLanguage) 🔗
从ScriptServer注销ScriptLanguage实例。
退货:
-@GlobalScope.OK关于成功;
-@GlobalScope.ERR_DOES_NOT_EXIST如果语言未在ScriptServer中注册。
void unregister_singleton(name: StringName) 🔗
删除在name下注册的单例。单例对象是而不是释放的。仅适用于在register_singleton()注册的用户定义的单例。