Item

继承: Object

派生: AnimationMixer, AudioStreamPlayer, CanvasItem, CanvasLayer, EditorFileSystem, EditorPlugin, EditorResourcePreview, HTTPRequest, InstancePlaceholder, MissingItem, MultiplayerSpawner, MultiplayerSynchronizer, NavigationAgent3D, Item3D, ResourcePreloader, ShaderGlobalsOverride, StatusIndicator, Timer, Viewport, WorldEnvironment

所有场景对象的基类。

描述

节点是i3D Act的构建块。它们可以作为另一个节点的子节点分配,从而形成树排列。给定节点可以包含任意数量的节点作为子节点,但要求所有兄弟节点(节点的直接子节点)都应具有唯一名称。

节点树组合起来称作为场景。场景可以保存到磁盘,然后实例化到其他场景。这特点使i3D Act 项目的架构和数据模型具有非常高的灵活性。

场景树:SceneTree包含节点的活动树。当一个节点被添加到场景树时,它会收到NOTIFICATION_ENTER_TREE通知,并触发其OnEnable()回调。子节点总是在其父节点之后添加,即父节点的OnEnable()回调将在其子节点之前触发。

一旦场景树中添加了所有节点,它们就会收到NOTIFICATIONiStart通知,并触发各自的iStart()回调。对于节点组,以相反的顺序调用iStart()回调,从子节点开始,向上移动到父节点。

这意味着当向场景树添加节点时,将使用以下顺序进行回调:父级的OnEnable(),子级的OnEnable(),子级的iStart(),最后是父级的iStart()(递归用于整个场景树)。

处理:节点可以覆盖“进程”状态,这样它们就会在请求它们处理(做某事)的每一帧上收到一个回调。正常处理(回调Update(),切换为set_update())尽可能快地发生,并且依赖于帧率,因此流转时长delta(以秒为单位)作为参数传递。物理处理(回调FixedUpdate(),切换为set_fixedupdate())每秒发生固定次数(默认为60次),对于与物理引擎相关的代码很有用。

节点也可以处理输入事件。当存在时,将为程序接收到的每个输入调用OnInput()函数。在许多情况下,这可能是矫枉过正的(除非用于简单的项目),unhandled_input()函数可能是首选;当输入事件没有被其他任何人(通常是GUIControl节点)处理时调用它,确保节点只接收为它准备的事件。

为了跟踪场景层次结构(尤其是在将场景实例化为其他场景时),可以为具有owner属性的节点设置“所有者”。这可以跟踪谁实例化了什么。不过,这在编写编辑器和工具时非常有用。

最后,当一个节点被Object.free()queue_free()释放时,它也会释放它的所有子节点。

组:节点可以添加到任意数量的组中,以便于管理,例如,您可以根据您的应用创建“敌人”或“收藏品”等组。请参阅add_to_group()is_in_group()remove_from_group()。然后,您可以检索这些组中的所有节点,迭代它们,甚至通过SceneTree上的方法调用组中的方法。

属性

方法

void

OnEnable() virtual

void

OnDisable() virtual

PackedStringArray

get_configuration_warnings() virtual const

void

OnInput(event: InputEvent) virtual

void

FixedUpdate(delta: float) virtual

void

Update(delta: float) virtual

void

iStart() virtual

void

shortcut_input(event: InputEvent) virtual

void

unhandled_input(event: InputEvent) virtual

void

unhandled_key_input(event: InputEvent) virtual

void

add_child(item: Item, force_readable_name: bool = false, internal: InternalMode = 0)

void

add_sibling(sibling: Item, force_readable_name: bool = false)

void

add_to_group(group: StringName, persistent: bool = false)

String

atr(message: String, context: StringName = "") const

String

atr_n(message: String, plural_message: StringName, n: int, context: StringName = "") const

Variant

call_deferred_thread_group(method: StringName, ...) vararg

Variant

call_thread_safe(method: StringName, ...) vararg

bool

can_process() const

Tween

create_tween()

Item

duplicate(flags: int = 15) const

Item

find_child(pattern: String, recursive: bool = true, owned: bool = true) const

Array[Item]

find_children(pattern: String, type: String = "", recursive: bool = true, owned: bool = true) const

Item

find_parent(pattern: String) const

Item

get_child(idx: int, include_internal: bool = false) const

int

get_child_count(include_internal: bool = false) const

Array[Item]

get_children(include_internal: bool = false) const

Array[StringName]

get_groups() const

int

get_index(include_internal: bool = false) const

Window

get_last_exclusive_window() const

int

get_multiplayer_authority() const

Item

get_item(path: ItemPath) const

Array

get_item_and_resource(path: ItemPath)

Item

get_item_or_null(path: ItemPath) const

Item

get_parent() const

ItemPath

get_path() const

ItemPath

get_path_to(item: Item, use_unique_path: bool = false) const

float

get_physics_process_delta_time() const

float

get_process_delta_time() const

Variant

get_rpc_config() const

bool

get_scene_instance_load_placeholder() const

SceneTree

get_tree() const

String

get_tree_string()

String

get_tree_string_pretty()

Viewport

get_viewport() const

Window

get_window() const

bool

has_item(path: ItemPath) const

bool

has_item_and_resource(path: ItemPath) const

bool

is_ancestor_of(item: Item) const

bool

is_displayed_folded() const

bool

is_editable_instance(item: Item) const

bool

is_greater_than(item: Item) const

bool

is_in_group(group: StringName) const

bool

is_inside_tree() const

bool

is_multiplayer_authority() const

bool

is_node_ready() const

bool

is_part_of_edited_scene() const

bool

is_physics_interpolated() const

bool

is_physics_interpolated_and_enabled() const

bool

is_physics_processing() const

bool

is_physics_processing_internal() const

bool

is_processing() const

bool

is_processing_input() const

bool

is_processing_internal() const

bool

is_processing_shortcut_input() const

bool

is_processing_unhandled_input() const

bool

is_processing_unhandled_key_input() const

void

move_child(child_item: Item, to_index: int)

void

notify_deferred_thread_group(what: int)

void

notify_thread_safe(what: int)

void

print_orphan_items() static

void

print_tree()

void

print_tree_pretty()

void

propagate_call(method: StringName, args: Array = [], parent_first: bool = false)

void

propagate_notification(what: int)

void

queue_free()

void

remove_child(item: Item)

void

remove_from_group(group: StringName)

void

reparent(new_parent: Item, keep_global_transform: bool = true)

void

replace_by(item: Item, keep_groups: bool = false)

void

requestiStart()

void

reset_physics_interpolation()

Error

rpc(method: StringName, ...) vararg

void

rpc_config(method: StringName, config: Variant)

Error

rpc_id(peer_id: int, method: StringName, ...) vararg

void

set_deferred_thread_group(property: StringName, value: Variant)

void

set_display_folded(fold: bool)

void

set_editable_instance(item: Item, is_editable: bool)

void

set_multiplayer_authority(id: int, recursive: bool = true)

void

set_fixedupdate(enable: bool)

void

set_physics_process_internal(enable: bool)

void

set_update(enable: bool)

void

set_process_input(enable: bool)

void

set_process_internal(enable: bool)

void

set_process_shortcut_input(enable: bool)

void

set_process_unhandled_input(enable: bool)

void

set_process_unhandled_key_input(enable: bool)

void

set_scene_instance_load_placeholder(load_placeholder: bool)

void

set_thread_safe(property: StringName, value: Variant)

void

set_translation_domain_inherited()

void

update_configuration_warnings()


信号

child_entered_tree(item: Item) 🔗

当子item进入SceneTree时发出,通常是因为这个节点进入了树(参见tree_entered),或者add_child()已经被调用。

该信号在子节点自己的NOTIFICATION_ENTER_TREEtree_entered之后发出。


child_exiting_tree(item: Item) 🔗

当子item即将退出SceneTree时发出,通常是因为该节点正在退出树(参见tree_exiting),或者因为子item正在被删除或释放。

当接收到这个信号时,树内部仍然可以访问子item。这个信号是在子节点自己的tree_exitingNOTIFICATION_EXIT_TREE之后发出的。


child_order_changed() 🔗

更改子节点列表时发出。添加、移动或删除子节点时会发生这种情况。


editor_description_changed(item: Item) 🔗

当节点的编辑器描述字段更改时发出。


editor_state_changed() 🔗

当与编辑器相关的节点属性更改时发出。仅在编辑器中发出。


ready() 🔗

在调用iStart()之后,当节点被认为准备就绪时发出。


renamed() 🔗

如果节点在节点树内,则在节点的name更改时发出。


replacing_by(item: Item) 🔗

当此节点被item替换时发出,请参见replace_by()

此信号在item添加为原始父节点的子节点之后发出,但在* 之前*所有原始子节点都已重设为item


tree_entered() 🔗

节点进入节点树时发出。

该信号在相关NOTIFICATION_ENTER_TREE通知之后发出。


tree_exited() 🔗

在节点退出节点树并不再活动后发出。

该信号在相关NOTIFICATION_EXIT_TREE通知之后发出。


tree_exiting() 🔗

当节点即将退出节点树时,将触发相关事件。此时,节点仍然有效,因此这是进行反初始化(或称“析构函数”)的合适位置。

该信号在节点的OnDisable()之后之前发出相关的NOTIFICATION_EXIT_TREE


枚举

enum ProcessMode: 🔗

ProcessMode PROCESS_MODE_INHERIT = 0

从节点的父节点继承process_mode。这是任何新创建节点的默认值。

ProcessMode PROCESS_MODE_PAUSABLE = 1

当,SceneTree.pausedtrue时停止处理。这是PROCESS_MODE_WHEN_PAUSED的反向行为,是根节点的默认值。

ProcessMode PROCESS_MODE_WHEN_PAUSED = 2

进程SceneTree.pausedtrue时。这是PROCESS_MODE_PAUSABLE的反向行为。

ProcessMode PROCESS_MODE_ALWAYS = 3

始终进行处理。忽略SceneTree.paused状态。这与PROCESS_MODE_DISABLED相反。

ProcessMode PROCESS_MODE_DISABLED = 4

从不处理。完全禁用处理,忽略SceneTree.paused。这与PROCESS_MODE_ALWAYS相反。


enum ProcessThreadGroup: 🔗

ProcessThreadGroup PROCESS_THREAD_GROUP_INHERIT = 0

基于具有未继承线程组模式的第一个父(或祖)节点的线程组模式处理此节点。有关详细信息,请参阅process_thread_group

ProcessThreadGroup PROCESS_THREAD_GROUP_MAIN_THREAD = 1

在主线程上处理此节点(以及设置为继承的子节点)。有关详细信息,请参阅process_thread_group

ProcessThreadGroup PROCESS_THREAD_GROUP_SUB_THREAD = 2

在子线程上处理此节点(以及设置为继承的子节点)。有关详细信息,请参阅process_thread_group


flags ProcessThreadMessages: 🔗

ProcessThreadMessages FLAG_PROCESS_THREAD_MESSAGES = 1

允许此节点在调用Update()之前处理使用call_deferred_thread_group()创建的线程消息。

ProcessThreadMessages FLAG_PROCESS_THREAD_MESSAGES_PHYSICS = 2

允许此节点在调用FixedUpdate()之前处理使用call_deferred_thread_group()创建的线程消息。

ProcessThreadMessages FLAG_PROCESS_THREAD_MESSAGES_ALL = 3

允许此节点在调用Update()FixedUpdate()之前处理使用call_deferred_thread_group()创建的线程消息。


enum PhysicsInterpolationMode: 🔗

PhysicsInterpolationMode PHYSICS_INTERPOLATION_MODE_INHERIT = 0

从该节点的父节点继承physics_interpolation_mode。这是任何新创建节点的默认值。

PhysicsInterpolationMode PHYSICS_INTERPOLATION_MODE_ON = 1

为该节点及其子节点 ( 设置为 PHYSICS_INTERPOLATION_MODE_INHERIT) 启用物理插值。这是根节点的默认设置。

PhysicsInterpolationMode PHYSICS_INTERPOLATION_MODE_OFF = 2

禁用该节点及其子节点 ( 设置为: PHYSICS_INTERPOLATION_MODE_INHERIT) 的子节点的物理插值。


enum DuplicateFlags: 🔗

DuplicateFlags DUPLICATE_SIGNALS = 1

复制节点的信号连接。

DuplicateFlags DUPLICATE_GROUPS = 2

复制节点的组。

DuplicateFlags DUPLICATE_SCRIPTS = 4

复制节点的脚本(如果与 DUPLICATE_USE_INSTANTIATION结合使用,也会覆盖复制的子脚本)。

DuplicateFlags DUPLICATE_USE_INSTANTIATION = 8

使用PackedScene.instantiate()进行复制。如果节点来自保存在磁盘上的场景,需要进行重用PackedScene.instantiate()作为该节点及其子节点副本的基础。


enum InternalMode: 🔗

InternalMode INTERNAL_MODE_DISABLED = 0

该节点不是内部的。

InternalMode INTERNAL_MODE_FRONT = 1

该节点将放置在父节点的子节点列表开头,位于所有非内部同级节点之前。

InternalMode INTERNAL_MODE_BACK = 2

该节点将放置在父节点的子节点的末尾,在任何非内部兄弟节点之后。


enum AutoTranslateMode: 🔗

AutoTranslateMode AUTO_TRANSLATE_MODE_INHERIT = 0

从节点的父节点继承auto_translate_mode。这是任何新创建节点的默认值。

AutoTranslateMode AUTO_TRANSLATE_MODE_ALWAYS = 1

始终自动转换。这是AUTO_TRANSLATE_MODE_DISABLED的倒数,也是根节点的默认值。

AutoTranslateMode AUTO_TRANSLATE_MODE_DISABLED = 2

永远不要自动翻译。这是AUTO_TRANSLATE_MODE_ALWAYS的倒数。

将跳过此节点和设置为AUTO_TRANSLATE_MODE_INHERIT的子节点的POT生成字符串解析。


常量

NOTIFICATION_ENTER_TREE = 10 🔗

节点进入SceneTree时收到的通知。参见OnEnable()

该通知是在之前接收到的相关的tree_entered信号。

NOTIFICATION_EXIT_TREE = 11 🔗

当节点将要退出SceneTree时收到的通知。参见OnDisable()

该通知是在相关的tree_exiting信号之后接收到的。

NOTIFICATION_MOVED_IN_PARENT = 12 🔗

已弃用: 引擎不再发送该通知。请改用 NOTIFICATION_CHILD_ORDER_CHANGED

NOTIFICATIONiStart = 13 🔗

节点准备就绪时收到的通知。参见iStart()

NOTIFICATION_PAUSED = 14 🔗

节点暂停时收到的通知。参见process_mode

NOTIFICATION_UNPAUSED = 15 🔗

节点未暂停时收到的通知。参见process_mode

NOTIFICATION_PHYSICS_PROCESS = 16 🔗

is_physics_processing()返回true时,每个物理帧从树收到的通知。参见FixedUpdate()

NOTIFICATION_PROCESS = 17 🔗

is_processing()返回true时,从树接收到的每个渲染帧的通知。参见Update()

NOTIFICATION_PARENTED = 18 🔗

当节点设置为另一个节点的子节点时收到的通知(参见add_child()add_sibling())。

注意:这并不是意味着节点进入了SceneTree

NOTIFICATION_UNPARENTED = 19 🔗

父节点在此节点上调用remove_child()时收到的通知。

注意:这是否不是意味着节点退出了SceneTree

NOTIFICATION_SCENE_INSTANTIATED = 20 🔗

PackedScene.instantiate()完成时,由新实例化的场景根节点收到的通知。

NOTIFICATION_DRAG_BEGIN = 21 🔗

拖动操作开始时收到的通知。所有节点都收到此通知,而不仅仅是被拖动的节点。

可以通过拖动提供拖动数据的Control(参见Control._get_drag_data())或使用Control.force_drag()来触发。

使用Viewport.gui_get_drag_data()获取拖动的数据。

NOTIFICATION_DRAG_END = 22 🔗

拖动操作结束时收到的通知。

使用Viewport.gui_is_drag_successful()检查拖动是否成功。

NOTIFICATION_PATH_RENAMED = 23 🔗

当节点的name或其祖先的name更改时收到的通知。当节点从SceneTree中删除时,此通知是而不是

NOTIFICATION_CHILD_ORDER_CHANGED = 24 🔗

更改子节点列表时收到的通知。添加、移动或删除子节点时会发生这种情况。

NOTIFICATION_INTERNAL_PROCESS = 25 🔗

is_processing_internal()返回true时,从树接收到每个渲染帧的通知。

NOTIFICATION_INTERNAL_PHYSICS_PROCESS = 26 🔗

is_physics_processing_internal()返回true时,从树接收到每个物理帧的通知。

NOTIFICATION_POST_ENTER_TREE = 27 🔗

当节点进入树时收到的通知,就在NOTIFICATIONiStart可能被接收之前。与后者不同,它是在节点每次进入树时发送的,而不仅仅是一次。

NOTIFICATION_DISABLED = 28 🔗

节点被禁用时收到的通知。参见PROCESS_MODE_DISABLED

NOTIFICATION_ENABLED = 29 🔗

节点被禁用后再次启用时收到的通知。参见PROCESS_MODE_DISABLED

NOTIFICATION_RESET_PHYSICS_INTERPOLATION = 2001 🔗

在节点或其祖先上调用reset_physics_interpolation()时收到的通知。

NOTIFICATION_EDITOR_PRE_SAVE = 9001 🔗

在带有节点的场景之前收到的通知保存在编辑器中。此通知仅在i3D编辑器中发送,不会发生在导出的项目中。

NOTIFICATION_EDITOR_POST_SAVE = 9002 🔗

在编辑器中保存带有节点的场景后立即收到通知。此通知仅在i3D Act 编辑器中发送,不会发生在导出的项目中。

NOTIFICATION_WM_MOUSE_ENTER = 1002 🔗

鼠标进入窗口时收到通知。

为嵌入式窗口以及桌面和Web平台实施。

NOTIFICATION_WM_MOUSE_EXIT = 1003 🔗

鼠标离开窗口时收到的通知。

为嵌入式窗口以及桌面和Web平台实施。

NOTIFICATION_WM_WINDOW_FOCUS_IN = 1004 🔗

当节点的Window祖先被聚焦时,从操作系统收到的通知。这可能是同一引擎实例的两个窗口之间的焦点变化,也可能是从操作系统桌面或第三方应用程序到应用窗口的焦点变化(在这种情况下,也会收到NOTIFICATION_APPLICATION_FOCUS_IN)。

Window节点在聚焦时接收此通知。

NOTIFICATION_WM_WINDOW_FOCUS_OUT = 1005 🔗

当节点的Window祖先散焦时从操作系统收到的通知。这可能是同一引擎实例的两个窗口之间的焦点变化,或者从应用窗口到操作系统桌面或第三方应用程序(在这种情况下也会收到NOTIFICATION_APPLICATION_FOCUS_OUT)。

Window节点在散焦时接收此通知。

NOTIFICATION_WM_CLOSE_REQUEST = 1006 🔗

发送关闭请求时从操作系统收到的通知(例如,使用“关闭”按钮或Alt+F4关闭窗口)。

在桌面平台上实现。

NOTIFICATION_WM_GO_BACK_REQUEST = 1007 🔗

发送返回请求时从操作系统收到的通知(例如,在Android上按下“返回”按钮)。

仅在Android上实施。

NOTIFICATION_WM_SIZE_CHANGED = 1008 🔗

调整窗口大小时收到的通知。

注意:只有调整大小的Window节点会收到此通知,并且不会传播到子节点。

NOTIFICATION_WM_DPI_CHANGE = 1009 🔗

当屏幕的每英寸点数(DPI)比例更改时从操作系统收到的通知。仅在macOS上实现。

NOTIFICATION_VP_MOUSE_ENTER = 1010 🔗

当鼠标光标进入Viewport的可见区域时收到的通知,该区域未被其他ControlWindow遮挡,前提是其Viewport.gui_disable_input,无论它当前是否聚焦。

NOTIFICATION_VP_MOUSE_EXIT = 1011 🔗

当鼠标光标离开Viewport的可见区域时收到的通知,该区域未被其他ControlWindow遮挡,前提是其Viewport.gui_disable_input,无论它当前是否聚焦。

NOTIFICATION_OS_MEMORY_WARNING = 2009 🔗

当应用程序超出其分配的内存时从操作系统收到的通知。

注意:仅在iOS实施。

NOTIFICATION_TRANSLATION_CHANGED = 2010 🔗

当翻译可能发生变更时收到通知。可以由用户更改区域设置、更改auto_translate_mode或在节点进入场景树时触发。可以用于响应语言更改,例如动态更改UI字符串。在使用内置翻译支持时很有用,例如Object.tr()

注意:此通知与NOTIFICATION_ENTER_TREE一起接收,因此如果您正在实例化一个场景,则子节点尚未初始化。您可以使用它为此节点、脚本创建的子节点设置翻译,或者如果您想访问编辑器中添加的子节点,请使用is_node_ready()确保节点已准备好。

func notification(what):
    if what == NOTIFICATION_TRANSLATION_CHANGED:
        if not is_node_ready():
            await start # 等待准备信号。
        $Label.text = atr("%d Bananas") % banana_counter

NOTIFICATION_WM_ABOUT = 2011 🔗

发送“关于”信息请求时从操作系统收到的通知。

注意: 仅在macOS上实现。

NOTIFICATION_CRASH = 2012 🔗

当引擎即将崩溃时,从i3D Act 的崩溃处理程序收到通知。

如果启用了崩溃处理程序,则在桌面平台上实现。

NOTIFICATION_OS_IME_UPDATE = 2013 🔗

当输入法引擎发生更新(例如IME光标位置或组合字符串的更改)时从操作系统收到的通知。

注意: 仅在macOS上实现。

NOTIFICATION_APPLICATION_RESUMED = 2014 🔗

应用程序恢复时从操作系统收到的通知。

注意: 具体到Android和iOS平台。

NOTIFICATION_APPLICATION_PAUSED = 2015 🔗

应用程序暂停时从操作系统收到的通知。

具体到Android和iOS平台。

注意:在iOS,您只有大约5秒的时间来完成由该信号启动的任务。如果您超过此分配,iOS将终止应用程序而不是暂停它。

NOTIFICATION_APPLICATION_FOCUS_IN = 2016 🔗

当应用程序聚焦时从操作系统收到的通知,即当焦点从操作系统桌面或第三方应用程序更改为i3D实例的任何打开窗口时。

在桌面和移动平台上实施。

NOTIFICATION_APPLICATION_FOCUS_OUT = 2017 🔗

当应用程序散焦时从操作系统收到的通知,即当焦点从i3D Act实例的任何打开窗口更改为操作系统桌面或第三方应用程序时。

在桌面和移动平台上实施。

NOTIFICATION_TEXT_SERVER_CHANGED = 2018 🔗

TextServer更改时收到的通知。


属性说明

AutoTranslateMode auto_translate_mode = 0 🔗

定义任何文本是否应根据当前语言环境自动更改为其翻译版本(对于LabelRichTextLabelWindow等节点)。还决定是否应解析节点的字符串以生成POT。

注意:对于根节点,也可以通过ProjectSettings.internationalization/rendering/root_node_auto_translate设置自动翻译模式。


String editor_description = "" 🔗

  • void set_editor_description(value: String)

  • String get_editor_description()

节点的可选描述。当鼠标悬停在编辑器的场景停靠区中的节点上时,它将显示为工具提示。


MultiplayerAPI multiplayer 🔗

与此节点关联的MultiplayerAPI实例。请参阅SceneTree.get_multiplayer()

注意:重命名节点或在树中移动它,不会将MultiplayerAPI移动到新路径,您必须手动更新。


StringName name 🔗

节点的名称。此名称在兄弟节点(来自同一父节点的其他子节点)中必须是唯一的。当设置为现有兄弟节点的名称时,该节点会自动重命名。

注意:更改名称时,以下字符将替换为下划线:(.@/"%)。特别是,@字符是为自动生成的名称保留的。另见String.validate_node_name()


Item owner 🔗

  • void set_owner(value: Item)

  • Item get_owner()

此节点的所有者。所有者必须是此节点的祖先。在PackedScene中打包所有者节点时,它拥有的所有节点也会保存在其中。另请参见unique_name_in_owner

注意:在编辑器中,场景根不拥有的节点通常不会显示在场景停靠中,并且不会被保存。为了防止这种情况,调用add_child()后记得设置所有者。


PhysicsInterpolationMode physics_interpolation_mode = 0 🔗

允许启用或禁用每个节点的物理插值,提供比全局打开和关闭物理插值更精细的控制粒度。有关全局设置,请参阅ProjectSettings.physics/common/physics_interpolationSceneTree.physics_interpolation

注意:当将节点传送到遥远的位置时,您应该暂时禁用使用reset_physics_interpolation()


ProcessMode process_mode = 0 🔗

节点的处理行为(参见ProcessMode)。要检查节点是否可以在其当前模式下处理,请使用can_process()


int process_physics_priority = 0 🔗

  • void set_physics_process_priority(value: int)

  • int get_physics_process_priority()

类似于process_priority,但用于NOTIFICATION_PHYSICS_PROCESSFixedUpdate()NOTIFICATION_INTERNAL_PHYSICS_PROCESS


int process_priority = 0 🔗

  • void set_process_priority(value: int)

  • int get_process_priority()

进程回调的节点执行顺序(Update()NOTIFICATION_PROCESSNOTIFICATION_INTERNAL_PROCESS)。优先级值较低*的节点首先调用其进程回调,而不管树顺序如何。


ProcessThreadGroup process_thread_group = 0 🔗

设置此节点的进程线程组(基本上,无论它是在主线程还是在子线程中接收NOTIFICATION_PROCESSNOTIFICATION_PHYSICS_PROCESSUpdate()还是FixedUpdate()(以及内部版本)。

默认情况下,线程组是PROCESS_THREAD_GROUP_INHERIT,这意味着该节点与父节点属于同一个线程组。线程组意味着特定线程组中的节点将一起处理,与其他线程组分开(取决于process_thread_group_order)。如果设置值为PROCESS_THREAD_GROUP_SUB_THREAD,则该线程组将发生在子线程(而不是主线程)上,否则如果设置为PROCESS_THREAD_GROUP_MAIN_THREAD,则将在主线程上处理。如果没有父或祖父母节点设置为继承以外的东西,则该节点将属于默认线程组。该默认组将在主线程上处理,其组顺序为0。

在子线程中进行处理时,禁止访问线程组外的节点中的大多数函数(这将导致调试模式下的错误)。使用Object.call_deferred()call_thread_safe()call_deferred_thread_group()等以便从线程组通信到主线程(或其他线程组)。

为了更好地理解进程线程组,这个想法是,任何设置为PROCESS_THREAD_GROUP_INHERIT以外的任何其他值的节点都将包括任何设置为继承到其进程线程组中的子(和孙子)节点。这意味着组中所有节点的处理将一起发生,与包括它们的节点同时发生。


int process_thread_group_order 🔗

  • void set_process_thread_group_order(value: int)

  • int get_process_thread_group_order()

更改处理线程组的顺序。顺序较小的组将在顺序较大的组之前处理。例如,当大量节点在子线程中处理并且之后,另一个组想要在主线程中收集它们的结果时,这很有用。


BitField[ProcessThreadMessages] process_thread_messages 🔗

设置当前线程组是否将处理消息(调用线程上的call_deferred_thread_group()),以及它是否希望在常规进程或物理进程回调期间接收它们。


String scene_file_path 🔗

  • void set_scene_file_path(value: String)

  • String get_scene_file_path()

原始场景的文件路径,如果节点已从PackedScene文件实例化。只有场景根节点包含它。


bool unique_name_in_owner = false 🔗

  • void set_unique_name_in_owner(value: bool)

  • bool is_unique_name_in_owner()

如果true,则可以从共享相同owner的任何节点或从owner本身访问该节点,在get_item()中使用特殊的%Name语法。

注意:如果具有相同owner的另一个节点与该节点共享相同的name,则该另一个节点将不再作为唯一节点访问。


方法说明

void OnEnable() virtual 🔗

当节点进入SceneTree时调用(例如在实例化、场景更改或在脚本中调用add_child()之后)。如果节点有子节点,则首先调用其OnEnable()回调,然后再调用子节点的回调。

对应于Object._notification()中的NOTIFICATION_ENTER_TREE通知。


void OnDisable() virtual 🔗

当节点即将离开SceneTree时调用(例如在释放、场景更改或在脚本中调用remove_child()之后)。如果节点有子节点,则在其所有子节点离开树之后,将最后调用其OnDisable()回调。

对应于Object._notification()中的NOTIFICATION_EXIT_TREE通知和信号tree_exiting。要在节点已经离开活动树时获得通知,请连接到tree_exited


PackedStringArray _get_configuration_warnings() virtual const 🔗

如果覆盖此方法的脚本是tool脚本,则从此方法返回的数组中的元素将在场景面板中显示为警告。

返回空数组不会产生警告。

当需要更新此节点的警告时,请调用update_configuration_warnings()

@export var energy = 0:
    set(value):
        energy = value
        update_configuration_warnings()

func _get_configuration_warnings():
    if energy < 0:
        return ["Energy must be 0 or greater."]
    else:
        return []

void OnInput(event: InputEvent) virtual 🔗

当有输入事件时调用。输入事件通过节点树向上传播,直到节点使用它。

它仅在启用输入处理时被调用,如果此方法被覆盖,则会自动完成,并且可以使用set_process_input()进行切换。

要使用输入事件并阻止它进一步传播到其他节点,可以调用Viewport.set_input_as_handled()

对于应用输入,unhandled_input()unhandled_key_input()通常更适合,因为它们允许GUI首先拦截事件。

注意:仅当节点存在于场景树中(即如果它不是孤儿)时才调用此方法。


void FixedUpdate(delta: float) virtual 🔗

在主循环的物理处理步骤期间调用。物理处理意味着帧率与物理同步,即delta参数将通常是恒定的(见下面的例外情况)。delta以秒为单位。

它仅在启用物理处理时调用,如果此方法被覆盖,则会自动完成,并且可以使用set_fixedupdate()进行切换。

处理按process_physics_priority的顺序进行,首先调用较低优先级的值。具有相同优先级的节点按树顺序处理,或者如编辑器中所示从上到下(也称为前序遍历)。

对应于Object._notification()中的NOTIFICATION_PHYSICS_PROCESS通知。

注意:仅当节点存在于场景树中(即如果它不是孤儿)时才调用此方法。

注意:delta如果以低于Engine.physics_ticks_per_second/Engine.max_physics_steps_per_frameFPS的帧速率运行,将比预期的大。这样做是为了避免“死亡螺旋”场景,即由于每帧物理步数不断增加,性能会直线下降。这种行为会影响Update()FixedUpdate()。因此,避免使用delta进行真实世界秒的时间测量。为此目的而使用Time单例方法,例如Time.get_ticks_usec()


void Update(delta: float) virtual 🔗

在主循环的处理步骤期间调用。处理发生在每一帧并且尽可能快,因此自前一帧以来的delta时间不是恒定的。delta以秒为单位。

它仅在启用处理时被调用,如果此方法被覆盖,处理会自动完成,并且可以使用set_update()进行切换。

处理按process_priority的顺序进行,首先调用较低优先级的值。具有相同优先级的节点按树顺序处理,或者如编辑器中所示从上到下(也称为前序遍历)。

对应于Object._notification()中的NOTIFICATION_PROCESS通知。

注意:仅当节点存在于场景树中(即如果它不是孤儿)时才调用此方法。

注意:delta如果以低于Engine.physics_ticks_per_second/Engine.max_physics_steps_per_frameFPS的帧速率运行,将比预期的大。这样做是为了避免“死亡螺旋”场景,即由于每帧物理步数不断增加,性能会直线下降。这种行为会影响Update()FixedUpdate()。因此,避免使用delta进行真实世界秒的时间测量。为此目的而使用Time单例方法,例如Time.get_ticks_usec()


void iStart() virtual 🔗

当节点“就绪”时调用,即当节点及其子节点都进入场景树时。如果节点有子节点,它们的iStart()回调首先被触发,然后父节点将收到就绪通知。

对应于Object._notification()中的NOTIFICATIONiStart通知。另请参阅变量的@onready注释。

通常用于初始化。对于更早的初始化,可以使用Object._init()。另见OnEnable()

注意:这个方法可能每个节点只能调用一次,从场景树中移除一个节点并再次添加后,iStart()而不是被第二次调用,这可以通过用requestiStart()请求另一个调用来绕过,在再次添加节点之前可以在任何地方调用。


void shortcut_input(event: InputEvent) virtual 🔗

OnInput()或任何GUIControl项尚未使用InputEventKeyInputEventShortcutInputEventJoypadButton时调用。它在unhandled_key_input()unhandled_input()之前调用。输入事件通过节点树向上传播,直到节点使用它。

它仅在启用快捷方式处理时被调用,如果此方法被覆盖,它会自动完成,并且可以使用set_process_shortcut_input()进行切换。

要使用输入事件并阻止它进一步传播到其他节点,可以调用Viewport.set_input_as_handled()

此方法可用于处理快捷方式。对于通用GUI事件,请改用OnInput()。场景事件通常应使用unhandled_input()unhandled_key_input()处理。

注意:仅当节点存在于场景树中(即如果它不是孤儿)时才调用此方法。


void unhandled_input(event: InputEvent) virtual 🔗

OnInput()或任何GUIControl项尚未使用InputEvent时调用。它在shortcut_input()之后和unhandled_key_input()之后调用。输入事件通过节点树向上传播,直到节点使用它。

仅当启用未处理的输入处理时才调用它,如果此方法被覆盖,则会自动完成,并且可以使用set_process_unhandled_input()进行切换。

要使用输入事件并阻止它进一步传播到其他节点,可以调用Viewport.set_input_as_handled()

对于应用输入,这种方法通常比OnInput()更合适,因为GUI事件需要更高的优先级。对于键盘快捷键,请考虑使用shortcut_input(),因为它在此方法之前被调用。最后,为了处理键盘事件,出于性能原因,请考虑使用unhandled_key_input()

注意:仅当节点存在于场景树中(即如果它不是孤儿)时才调用此方法。


void _unhandled_key_input(event: InputEvent) virtual 🔗

OnInput()或任何GUIControl项尚未使用InputEventKey时调用。它在shortcut_input()之后但在unhandled_input()之前调用。输入事件通过节点树向上传播,直到节点使用它。

仅当启用未处理的键输入处理时才调用它,如果此方法被覆盖,则会自动完成,并且可以使用set_process_unhandled_key_input()进行切换。

要使用输入事件并阻止它进一步传播到其他节点,可以调用Viewport.set_input_as_handled()

处理快捷方式后,此方法可用于处理带有AltAlt+CtrlAlt+Shift修饰符的Unicode字符输入。

对于应用输入,这和unhandled_input()通常比OnInput()更合适,因为GUI事件应该首先处理。这种方法也比unhandled_input()表现更好,因为不相关的事件,如InputEventMouseMotion会被自动过滤。对于快捷方式,请考虑使用shortcut_input()

注意:仅当节点存在于场景树中(即如果它不是孤儿)时才调用此方法。


void add_child(item: Item, force_readable_name: bool = false, internal: InternalMode = 0) 🔗

添加一个子item。节点可以有任意数量的子节点,但每个子节点必须有唯一的名称。当父节点被删除时,子节点会自动被删除,因此可以通过删除最顶层的节点来删除整个场景。

如果force_readable_name的值为true,则可以提高添加的item的可读性。如果没有命名,item将被重命名为其类型,如果它与兄弟节点共享name,则会更恰当地添加一个数字作为后缀。这个操作非常耗时。因此,建议将此设置为false,这在两种情况下都分配一个以@结尾的虚拟名称。

如果internalINTERNAL_MODE_DISABLED不同,则该子节点将被添加为内部节点。这些节点被get_children()等方法忽略,除非它们的参数include_internaltrue。目的是向用户隐藏内部节点,以防止用户无意中删除或修改它们。一些GUI节点使用此功能,例如ColorPicker。有关可用的模式,请参阅InternalMode

注意:如果item已经有父节点,那么此方法将失败。请先使用remove_child()item从其当前父节点中移除。例如:

var child_item = get_child(0)
if child_item.get_parent():
    child_item.get_parent().remove_child(child_item)
add_child(child_item)

如果您需要将子节点添加到子节点列表中的特定节点下方,请使用add_sibling()而不是此方法。

注意:如果您希望将子节点持久化到PackedScene,除了调用add_child()之外,您还必须设置owner。这通常与工具脚本和编辑器插件相关。如果在没有设置owner的情况下调用add_child(),则新添加的Item将不会在场景树中可见,尽管它会在2D/3D视图中可见。


void add_sibling(sibling: Item, force_readable_name: bool = false) 🔗

sibling节点添加到该节点的父节点,并将添加的兄弟节点移动到该节点的正下方。

如果force_readable_nametrue,则提高添加的sibling的易读性。如果未命名,则将sibling重命名为其类型,如果它与兄弟共享name,则更合适地使用数字后缀。此操作非常缓慢。因此,建议将其保留给false,它会在这两种情况下分配一个具有@的虚拟名称。

如果不需要在子节点列表中的特定节点下方添加子节点,请使用add_child()代替此方法。

注意:如果此节点是内部的,则添加的兄弟节点也将是内部的(参见add_child()内部参数)。


void add_to_group(group: StringName, persistent: bool = false) 🔗

将节点添加到group。组有助于组织节点子集,例如“敌人”“收藏品”。请参阅描述中的注释和SceneTree中的组方法。

如果persistenttrue,则该组将在保存在PackedScene中时存储。在Item停靠站中创建和显示的所有组都是持久的。

注意:为了提高性能,组名的顺序是而不是保证的,并且可能在项目运行之间有所不同。因此,不要依赖组顺序。

注意:SceneTree的组方法将在这个节点上工作,如果不在树内(参见is_inside_tree())。


String atr(message: String, context: StringName = "") const 🔗

使用项目设置中配置的翻译目录翻译message。可以指定进一步的context来帮助翻译。请注意,大多数Control节点会自动翻译其字符串,因此此方法对于格式化字符串或自定义绘制的文本非常有用。

此方法与Object.tr()的工作原理相同,只是添加了尊重auto_translate_mode状态。

如果Object.can_translate_messages()false,或者没有可用的翻译,则此方法返回message而不进行更改。请参阅Object.set_message_translation()


String atr_n(message: String, plural_message: StringName, n: int, context: StringName = "") const 🔗

使用项目设置中配置的翻译目录翻译messageplural_message。可以指定进一步的context来帮助翻译。

此方法的工作方式与Object.tr_n()相同,只是添加了尊重auto_translate_mode状态。

如果Object.can_translate_messages()false,或者没有可用的翻译,则此方法返回messageplural_message,而不进行更改。参见Object.set_message_translation()

n是消息主题的数量。翻译系统使用它来获取当前语言的正确复数形式。

注意:负数和float可能无法正确应用于某些可数主题。建议使用atr()处理这些情况。


Variant call_deferred_thread_group(method: StringName, ...) vararg 🔗

此函数类似于Object.call_deferred(),只是调用将在处理节点线程组时发生。如果节点线程组在子线程中处理,则调用将在该线程上完成,就在调用NOTIFICATION_PROCESSNOTIFICATION_PHYSICS_PROCESSUpdate()FixedUpdate()或其内部版本之前。


Variant call_thread_safe(method: StringName, ...) vararg 🔗

此函数确保此函数的调用将成功,无论它是否从线程完成。如果从不允许调用该函数的线程调用,则调用将延迟。否则,调用将直接通过。


bool can_process() const 🔗

返回true如果节点可以从SceneTreeViewport接收处理通知和输入回调(NOTIFICATION_PROCESSOnInput()等),返回值取决于process_mode

-如果设置为PROCESS_MODE_PAUSABLE,则在应用处理时返回true,即SceneTree.pausedfalse

-如果设置为PROCESS_MODE_WHEN_PAUSED,则在应用暂停时返回true,即SceneTree.pausedtrue

-如果设置为PROCESS_MODE_ALWAYS,总是返回true

-如果设置为PROCESS_MODE_DISABLED,总是返回false

-如果设置为PROCESS_MODE_INHERIT,则使用父节点的process_mode来确定结果。

如果节点不在树内,则返回false,无论process_mode的值如何。


Tween create_tween() 🔗

创建一个新的Tween并将其绑定到此节点。

这相当于执行以下操作:

get_tree().create_tween().bind_item(self)

补间将在下一个进程框架或物理框架(取决于TweenProcessMode)中自动启动。有关绑定到节点的补间的更多信息,请参阅Tween.bind_node()

注意:即使节点不在SceneTree中,也可以使用该方法,但在使用自定义MainLoop时可能会出现意外情况。


Item duplicate(flags: int = 15) const 🔗

复制节点,返回一个新节点及其所有属性、信号、组和从原始节点复制的子节点。可以通过flags调整行为(请参阅DuplicateFlags)。

注意:对于附加了Script的节点,如果Object._init()已定义了所需的参数,则复制的节点将没有Script


Item find_child(pattern: String, recursive: bool = true, owned: bool = true) const 🔗

查找此节点的namepattern匹配的第一个后代,如果未找到匹配项,则返回null。通过String.match()对节点名进行匹配,而不是它们的路径。因此,它区分大小写,"*"匹配零个或多个字符,"?"匹配任何单个字符。

如果[param recursive]为[code]false``,则只检查该节点的直接子节点。节点按树顺序检查,因此首先检查该节点的第一个直接子节点,然后检查其自己的直接子节点等,然后再移动到第二个直接子节点,依此类推。内部子节点也包括在搜索中(参见add_child()中的内部参数)。

如果ownedtrue,则仅检查具有有效owner节点的后代。

注意:这个方法可能很慢,考虑将找到的节点的引用存储在变量中,或者,使用具有唯一名称的get_item()(参见unique_name_in_owner)。

注意:要查找与模式或类类型匹配的所有后代节点,请参见find_children()


Array[Item] find_children(pattern: String, type: String = "", recursive: bool = true, owned: bool = true) const 🔗

查找此节点名称匹配pattern的所有后代,如果未找到匹配项,则返回一个空Array。通过String.match()对节点名称进行匹配,而不是它们的路径。因此,它区分大小写,"*"匹配零个或多个字符,"?"匹配任何单个字符。

如果[param type]不为空,则仅包括从[param type]继承的祖先(参见[method Object.is_class])。

如果[param recursive]为[code]false``,则只检查该节点的直接子节点。节点按树顺序检查,因此首先检查该节点的第一个直接子节点,然后检查其自己的直接子节点等,然后再移动到第二个直接子节点,依此类推。内部子节点也包括在搜索中(参见add_child()中的内部参数)。

如果ownedtrue,则仅检查具有有效owner节点的后代。

注意:这种方法可能很慢。考虑将对找到的节点的引用存储在变量中。

注意:要查找与模式匹配的单个后代节点,请参见find_child()


Item find_parent(pattern: String) const 🔗

查找此节点的namepattern匹配的第一个祖先,如果未找到匹配项,则返回null。匹配是通过String.match()完成的。因此,它区分大小写,"*"匹配零个或多个字符,"?"匹配任何单个字符。另请参见find_child()find_children()

注意:当此方法在场景树中向上移动时,它在大型、深度嵌套的节点中可能会很慢。考虑将对找到的节点的引用存储在变量中。或者,使用具有唯一名称的get_item()(参见unique_name_in_owner)。


Item get_child(idx: int, include_internal: bool = false) const 🔗

通过索引获取子节点。每个子节点相对于其兄弟节点有一个索引(请参阅get_index())。第一个子节点的索引为0。也可以使用负值从列表末尾开始。此方法可与get_child_count()结合使用,以遍历此节点的子节点。如果给定的索引处没有子节点存在,则此方法返回null并生成错误。如果include_internalfalse,则忽略内部子节点(请参阅add_child()internal参数)。

# 假设以下为该项目的子项,按顺序排列。
# 首先,中间,最后。

var a = get_child(0).name  # a 是 '第一'
var b = get_child(1).name  # b 是 '中间'
var b = get_child(2).name  # b 是 '最后的' 或 '上一个'
var c = get_child(-1).name # c 是 '最后的' 或 '上一个'

注意:要通过ItemPath获取节点,请使用get_item()方法。


int get_child_count(include_internal: bool = false) const 🔗

返回此节点的子节点数。

如果include_internalfalse,则不计算内部子级(参见add_child()内部参数)。


Array[Item] get_children(include_internal: bool = false) const 🔗

返回Array内此节点的所有子节点。

如果include_internalfalse,则从返回的数组中排除内部子元素(参见add_child()内部参数)。


Array[StringName] get_groups() const 🔗

返回节点已添加到的组名的Array

注意:为了提高性能,组名的顺序没有被保证,并且可能在项目运行之间有所不同。因此,不要依赖组顺序。

注意:此方法还可能返回一些以下划线开头的组名(_)。这些由引擎内部使用。为避免冲突,不要使用以下划线开头的自定义组。要排除内部组,请参阅以下代码片段:

# 存储项目非内部组(作为StringNames字符串数组)。
var non_internal_groups = []
for group in get_groups():
    if not str(group).begins_with("_"):
        non_internal_groups.push_back(group)

int get_index(include_internal: bool = false) const 🔗

返回此节点在其兄弟节点中的顺序。第一个节点的索引是0。另请参见get_child()

如果include_internalfalse,则返回忽略内部子项的索引。第一个非内部子项的索引为0(参见add_child()内部参数)。


Window get_last_exclusive_window() const 🔗

返回包含此节点的Window,或从包含此节点的窗口链开始的窗口链中的最后一个独占子窗口。


int get_multiplayer_authority() const 🔗

返回此节点的多人权限的对等ID。请参见set_multiplayer_authority()


Item get_item(path: ItemPath) const 🔗

获取一个节点。ItemPath可以是相对路径(从此节点开始),也可以是绝对路径(从SceneTree.root开始)。如果path指向的节点无效,则会生成错误并返回null。试图访问返回值上的方法将导致“试图在空实例上调用<method>”错误。

注意:通过绝对路径获取仅在节点位于场景树中时有效(请参阅is_inside_tree())。

示例:假设此方法是从角色节点中调用的,位于以下树中:

┖╴root
   ┠╴Character (you are here!)
   ┃  ┠╴Sword
   ┃  ┖╴Backpack
   ┃     ┖╴Dagger
   ┠╴MyGame
   ┖╴Swamp
      ┠╴Alligator
      ┠╴Mosquito
      ┖╴Goblin

The following calls will return a valid item:

get_item("Sword")
get_item("Backpack/Dagger")
get_item("../Swamp/Alligator")
get_item("/root/MyGame")

Array get_item_and_resource(path: ItemPath) 🔗

根据 ItemPath 的子名称,获取一个节点及其嵌套资源。返回大小为3Array,其中:

-Element0Item,如果未找到,则null

-Element1是子名称的最后一个嵌套Resource,如果未找到,则null; Prints Sprite -Element2是剩余的ItemPath,指的是现有的非Resource属性(参见Object.get_indexed())。

示例:

var a = get_item_and_resource("AreaTrigger/Sprite")
print(a[0].name) # 打印 Sprite
print(a[1])      # 打印 <null>
print(a[2])      # 打印 ^""

var b = get_item_and_resource("AreaTrigger/Sprite:texture:atlas")
print(b[0].name)        # 打印 Sprite
print(b[1].get_class()) # 打印 AtlasTexture
print(b[2])             # 打印 ^""

var c = get_item_and_resource("AreaTrigger/Sprite:texture:atlas:region")
print(c[0].name)        # 打印 AreaTrigger
print(c[1].get_class()) # 打印 AtlasTexture
print(c[2])             # 打印 ^":region"

Item get_item_or_null(path: ItemPath) const 🔗

通过ItemPath获取节点。类似于get_item(),但如果path没有指向有效节点,则不会生成错误。


Item get_parent() const 🔗

返回此节点的父节点,如果节点没有父节点,则返回null


ItemPath get_path() const 🔗

返回节点相对于SceneTree.root的绝对路径。如果节点不在场景树内,则此方法失败并返回一个空的ItemPath


ItemPath get_path_to(item: Item, use_unique_path: bool = false) const 🔗

返回从该节点到指定item的相对ItemPath。两个节点项必须在同一个SceneTree或场景层次结构中,否则此方法失败并返回一个空的ItemPath

如果use_unique_pathtrue,则返回该节点唯一名称的最短路径(参见unique_name_in_owner)。

注意:如果你得到一个从唯一节点开始的相对路径,由于添加了唯一节点的名称,该路径可能比正常的相对路径长。


float get_physics_process_delta_time() const 🔗

返回自上一次物理回调以来经过的时间(以秒为单位)。此值与FixedUpdate()delta参数相同,并且在运行时通常是一致的,除非更改了Engine.physics_ticks_per_second。另请参见NOTIFICATION_PHYSICS_PROCESS

注意:如果以低于Engine.physics_ticks_per_second/Engine.max_physics_steps_per_frameFPS的帧速率运行,返回值将比预期的大。这样做是为了避免“死亡螺旋”场景,即由于每帧物理步数不断增加,性能会直线下降。这种行为会影响Update()FixedUpdate()。因此,避免使用delta进行真实世界秒的时间测量。为此目的而使用Timesingleton的方法,例如Time.get_ticks_usec()


float get_process_delta_time() const 🔗

返回自上次进程回调以来经过的时间(以秒为单位)。此值与Update()delta参数相同,并且可能因帧而异。另请参见NOTIFICATION_PROCESS

注意:如果以低于Engine.physics_ticks_per_second/Engine.max_physics_steps_per_frameFPS的帧速率运行,返回值将比预期的大。这样做是为了避免“死亡螺旋”场景,即由于每帧物理步数不断增加,性能会直线下降。这种行为会影响Update()FixedUpdate()。因此,避免使用delta进行真实世界秒的时间测量。为此目的而使用Timesingleton的方法,例如Time.get_ticks_usec()


Variant get_rpc_config() const 🔗

使用rpc_config()返回将方法名称映射到为此节点定义的RPC配置的Dictionary


bool get_scene_instance_load_placeholder() const 🔗

如果此节点是实例加载占位符,则返回true。请参阅InstancePlaceholderset_scene_instance_load_placeholder()


SceneTree get_tree() const 🔗

返回包含此节点的SceneTree。如果此节点不在树内,则生成错误并返回null。另请参见is_inside_tree()


String get_tree_string() 🔗

String的形式返回树。主要用于调试目的。此版本显示相对于当前节点的路径,并且适合复制/粘贴到get_item()函数中。它也可以用于应用UI/用户体验。

可输出,例如:

TheGame
TheGame/Menu
TheGame/Menu/Label
TheGame/Menu/Camera2D
TheGame/SplashScreen
TheGame/SplashScreen/Camera2D

String get_tree_string_pretty() 🔗

类似于get_tree_string(),该方法将树以String的形式返回。此版本显示更具图形化的表示方式,类似于在场景对话框中显示的效果。它适用于检查更大的树。

可能会输出出以下内容:

┖╴TheGame
   ┠╴Menu
   ┃  ┠╴Label
   ┃  ┖╴Camera2D
   ┖╴SplashScreen
      ┖╴Camera2D

Viewport get_viewport() const 🔗

如果节点在树内,则返回节点最接近的Viewport祖先。否则,返回null


Window get_window() const 🔗

返回包含此节点的Window,如果该节点在主窗口中,这相当于得到根节点(get_tree().get_root())。


bool has_item(path: ItemPath) const 🔗

如果path指向有效节点,则返回true。另请参见get_item()


bool has_item_and_resource(path: ItemPath) const 🔗

返回true,如果path指向一个有效的节点,并且它的子名指向一个有效的Resource,例如2D/CollisionShape:形状。不考虑不是Resource类型的属性(例如节点或其他Variant类型)。另请参见get_item_and_resource()


bool is_ancestor_of(item: Item) const 🔗

如果给定的item是该节点的直接或间接子节点,则返回true


bool is_displayed_folded() const 🔗

如果节点在场景停靠区中折叠(折叠),则返回true。此方法旨在用于编辑器插件和工具。另请参见set_display_folded()


bool is_editable_instance(item: Item) const 🔗

如果item相对于此节点启用了可编辑的子节点,则返回true。此方法旨在用于编辑器插件和工具。另请参见set_editable_instance()


bool is_greater_than(item: Item) const 🔗

如果给定的item在场景层次结构中比该节点出现得晚,则返回true。稍后出现的节点通常是最后处理的。


bool is_in_group(group: StringName) const 🔗

如果此节点已添加到给定的group,则返回true。参见add_to_group()remove_from_group()。另请参阅描述中的注释和SceneTree的组方法。


bool is_inside_tree() const 🔗

如果此节点当前位于SceneTree内,则返回true。另请参见get_tree()


bool is_multiplayer_authority() const 🔗

如果本地系统是该节点的多人权限,则返回true


bool is_node_ready() const 🔗

如果节点准备好,则返回true,即它在场景树中并且它的所有子节点都已初始化。

requestiStart()将其重置回false


bool is_part_of_edited_scene() const 🔗

如果节点是当前在编辑器中打开的场景的一部分,则返回true


bool is_physics_interpolated() const 🔗

如果为此节点启用了物理插值,则返回true(参见physics_interpolation_mode)。

注意:只有在SceneTree中设置了标志并且启用了物理插值时,插值才会处于活动状态。这可以使用is_physics_interpolated_and_enabled()进行测试。


bool is_physics_interpolated_and_enabled() const 🔗

如果在SceneTree中启用了物理插值(参见physics_interpolation_mode,则返回true

这是is_physics_interpolated()的方便版本,它还检查是否全局启用物理插值。

请参阅SceneTree.physics_interpolationProjectSettings.physics/common/physics_interpolation


bool is_physics_processing() const 🔗

如果启用了物理处理,则返回true(参见set_fixedupdate())。


bool is_physics_processing_internal() const 🔗

如果启用了内部物理处理,则返回true(参见set_physics_process_internal())。


bool is_processing() const 🔗

如果启用了处理,则返回true(参见set_update())。


bool is_processing_input() const 🔗

如果节点正在处理输入,则返回true(参见set_process_input())。


bool is_processing_internal() const 🔗

如果启用了内部处理,则返回true(参见set_process_internal())。


bool is_processing_shortcut_input() const 🔗

如果节点正在处理快捷方式,则返回true(参见set_process_shortcut_input())。


bool is_processing_unhandled_input() const 🔗

如果节点正在处理未处理的输入,则返回true(参见set_process_unhandled_input())。


bool is_processing_unhandled_key_input() const 🔗

如果节点正在处理未处理的键输入,则返回true(参见set_process_unhandled_key_input())。


void move_child(child_item: Item, to_index: int) 🔗

child_item移动到给定索引。节点的索引是其兄弟节点之间的顺序。如果to_index为负数,则从列表末尾开始计算索引。另请参见get_child()get_index()

注意:几个引擎回调(iStart()Update()等)和通过propagate_notification()发送的通知的处理顺序受到树顺序的影响。CanvasItem节点也以树顺序呈现。另见process_priority


void notify_deferred_thread_group(what: int) 🔗

类似于call_deferred_thread_group(),但用于通知。


void notify_thread_safe(what: int) 🔗

类似于call_thread_safe(),但用于通知。


void print_orphan_items() static 🔗

打印所有孤立节点(SceneTree之外的节点)。用于调试。

注意:此方法仅适用于调试版本。在发布模式下导出的项目中不执行任何操作。


void print_tree() 🔗

递归地将节点及其子节点输出到控制台。该节点不必位于树中。此方法输出相对于此节点的ItemPath,并适合复制/粘贴到get_item()中。另请参阅print_tree_pretty()

可能会输出的内容示例:

.
Menu
Menu/Label
Menu/Camera2D
SplashScreen
SplashScreen/Camera2D

void print_tree_pretty() 🔗

递归地将节点及其子节点输出到控制台。节点不必在树中。类似于print_tree(),但图形表示类似于编辑器的场景面板中显示的内容。它适用于检查更大的树。

可能会输出出以下内容:

┖╴TheGame
   ┠╴Menu
   ┃  ┠╴Label
   ┃  ┖╴Camera2D
   ┖╴SplashScreen
      ┖╴Camera2D

void propagate_call(method: StringName, args: Array = [], parent_first: bool = false) 🔗

在此节点及其所有子节点上递归地调用给定的method名称,将args作为参数传递。

如果parent_firsttrue,则首先在此节点上调用该方法,然后在其所有子节点上调用该方法。如果false,则首先调用子方法。


void propagate_notification(what: int) 🔗

递归地在此节点及其所有子节点上调用whatObject.notification()


void queue_free() 🔗

将要删除的此节点排在当前帧的末尾。删除时,它的所有子节点也会被删除,并且对该节点及其子节点的所有引用都将无效。

Object.free()不同,节点不会立即删除,删除前仍然可以访问。多次调用queue_free()也是安全的。使用Object.is_queued_for_deletion()检查节点是否会在帧结束时被删除。

注意:节点只有在所有其他延迟调用完成后才会被释放,使用此方法并不总是与通过Object.call_deferred()调用Object.free()相同。


void remove_child(item: Item) 🔗

删除子itemitem及其子节点删除。要删除节点,请参阅queue_free()

注意:当此节点位于树内时,此方法将删除的item(或其后代)的owner设置为null,如果它们的owner不再是祖先(参见is_ancestor_of())。


void remove_from_group(group: StringName) 🔗

从给定的group中删除节点。如果节点不在group中,则不执行任何操作。另请参阅描述中的注释和SceneTree的组方法。


void reparent(new_parent: Item, keep_global_transform: bool = true) 🔗

将此Item的父节点更改为new_parent。该节点需要已经有一个父节点。如果从新位置仍然可以访问该节点的所有者(即,该节点在操作后仍然是新父节点的后代),则保留该节点的owner

如果keep_global_transformtrue,则如果支持,将保留节点的全局变换。Item3DControl支持此参数(但Control仅保留位置)。


void replace_by(item: Item, keep_groups: bool = false) 🔗

用给定的item替换此节点。此节点的所有子节点都移动到item

如果keep_groupstrue,则将item添加到替换节点所在的相同组中(参见add_to_group())。

警告:被替换的节点从树中删除,但它是删除。为防止内存泄漏,请将对节点的引用存储在变量中,或使用Object.free()


void requestiStart() 🔗

请求下次节点进入树时再次调用iStart()没有立即调用iStart()

注意:此方法只影响当前节点,如果节点的子节点也需要请求准备就绪,则需要为其中的每一个调用此方法,当节点及其子节点再次进入树时,iStart()回调的顺序将与正常相同。


void reset_physics_interpolation() 🔗

当物理插值处于活动状态时,将节点移动到完全不同的变换(例如级别内的位置)可能会导致可见故障,因为对象在物理刻度上从旧位置移动到新位置。

可以通过调用此方法来防止该故障,该方法会暂时禁用插值,直到物理刻度完成。

节点和所有子节点将递归地接收通知NOTIFICATION_RESET_PHYSICS_INTERPOLATION

注意:这个函数应该在移动节点之后调用,而不是之前。


Error rpc(method: StringName, ...) vararg 🔗

向网络(和本地)上的对等点发送给定method的远程过程调用请求,向RPC调用的方法发送附加参数。调用请求只会由具有相同ItemPath的节点接收,包括完全相同的name。行为取决于给定method的RPC配置(参见rpc_config()@S3Script.@rpc)。默认情况下,方法不会暴露给RPC。

如果调用成功,可以返回@GlobalScope.OK,如果method中传递的参数不匹配,@GlobalScope.ERR_INVALID_PARAMETER,如果无法获取节点的multiplayer(例如节点不在树内),@GlobalScope.ERR_CONNECTION_ERROR如果multiplayer的连接不可用。

注意:只有在收到来自MultiplayerAPIMultiplayerAPI.connected_to_server信号后,您才能安全地在客户端上使用RPC。您还需要通过MultiplayerAPI.server_disconnected之类的MultiplayerAPI信号或通过检查(get_multiplayer(). peer.get_connection_status()==CONNECTION_CONNECTED)来跟踪连接状态。


void rpc_config(method: StringName, config: Variant) 🔗

更改给定method的RPC配置。config应该是null以禁用该功能(默认情况下),或者是包含以下条目的Dictionary

-rpc_mode:参见RPCMode

-transfer_mode:参见TransferMode

-call_local:如果true,方法也会在本地调用;

-Channel:一个int,表示发送RPC的通道。


Error rpc_id(peer_id: int, method: StringName, ...) vararg 🔗

rpc()发送到由peer_id标识的特定对等点(参见MultiplayerPeer.set_target_peer())。

如果调用成功,可以返回@GlobalScope.OK,如果method中传递的参数不匹配,@GlobalScope.ERR_INVALID_PARAMETER,如果无法获取节点的multiplayer(例如节点不在树内),@GlobalScope.ERR_CONNECTION_ERROR如果multiplayer的连接不可用。


void set_deferred_thread_group(property: StringName, value: Variant) 🔗

类似于call_deferred_thread_group(),但用于设置属性。


void set_display_folded(fold: bool) 🔗

如果设置为true,则节点在Scene扩展坞中显示折叠。因此,它的所有子节点都被隐藏。此方法旨在用于编辑器插件和工具,但它也适用于发布版本。另请参阅is_displayed_folded()


void set_editable_instance(item: Item, is_editable: bool) 🔗

设置为true以允许item拥有的所有节点在Scene扩展坞中可用且可编辑,即使它们的owner不是场景根。此方法旨在用于编辑器插件和工具,但也适用于发布版本。另请参阅is_editable_instance()


void set_multiplayer_authority(id: int, recursive: bool = true) 🔗

使用给定的对等点id将节点的多人权限设置为对等点。多人权限是对网络上的节点拥有权限的对等点。默认为对等点ID 1(服务器)。与rpc_config()MultiplayerAPI结合使用很有用。

如果recursivetrue,则递归地将给定对等点设置为该节点的所有子节点的权限。

警告:这不会**自动将新权限复制到其他对等点。这样做是开发人员的责任。您可以使用MultiplayerSpawner.spawn_function、RPC或MultiplayerSynchronizer复制新权限的信息。此外,父权限不会**传播到新添加的子节点。


void set_fixedupdate(enable: bool) 🔗

如果设置为true,则启用物理(固定帧率)处理。当一个节点正在处理时,它将在固定(通常为60 FPS,请参阅Engine.physics_ticks_per_second更改)间隔下接收NOTIFICATION_PHYSICS_PROCESS(如果存在,将调用FixedUpdate()回调)。

注意:如果FixedUpdate()被覆盖,这将在调用iStart()之前自动启用。


void set_physics_process_internal(enable: bool) 🔗

如果设置为true,则启用此节点的内部物理处理。内部物理处理与正常的FixedUpdate()调用隔离发生,并且由一些节点在内部使用以保证正常运行,即使节点暂停或物理处理被禁用以进行脚本编写(set_fixedupdate())。

警告:内置节点的内部逻辑依赖于内部处理。禁用它是不安全的,可能会导致意外行为。如果您知道自己在做什么,请使用此方法。


void set_update(enable: bool) 🔗

如果设置为true,则启用处理。当一个节点正在处理时,它将在每个绘制的帧上收到一个NOTIFICATION_PROCESS(如果存在,将调用Update()回调)。

注意:如果Update()被覆盖,这将在调用iStart()之前自动启用。

注意:此方法只影响Update()回调,即对其他类似FixedUpdate()的回调没有影响。如果要禁用对节点的所有处理,请将process_mode设置为PROCESS_MODE_DISABLED


void set_process_input(enable: bool) 🔗

如果设置为true,则启用输入处理。

注意:如果OnInput()被覆盖,这将在调用iStart()之前自动启用。GUI控件也已经启用了输入处理,例如ButtonTextEdit


void set_process_internal(enable: bool) 🔗

如果设置为true,则启用此节点的内部处理。内部处理独立于正常的Update()调用进行,并且由某些节点在内部使用以保证正常运行,即使节点暂停或禁用处理以进行脚本(set_update())。

警告:内置节点的内部逻辑依赖于内部处理。禁用它是不安全的,可能会导致意外行为。如果您知道自己在做什么,请使用此方法。


void set_process_shortcut_input(enable: bool) 🔗

如果设置为true,则启用此节点的快捷方式处理。

注意:如果shortcut_input()被覆盖,这将在调用iStart()之前自动启用。


void set_process_unhandled_input(enable: bool) 🔗

如果设置为true,则启用未处理的输入处理。它使节点能够接收以前未处理的所有输入(通常由Control处理)。

注意:如果unhandled_input()被覆盖,这将在调用iStart()之前自动启用。未处理的输入处理也已经为GUI控件启用,例如ButtonTextEdit


void set_process_unhandled_key_input(enable: bool) 🔗

如果设置为true,则启用未处理的键输入处理。

注意:如果unhandled_key_input()被覆盖,这将在调用iStart()之前自动启用。


void set_scene_instance_load_placeholder(load_placeholder: bool) 🔗

如果设置为true,则当从PackedScene打包和实例化时,节点将成为InstancePlaceholder。另请参见get_scene_instance_load_placeholder()


void set_thread_safe(property: StringName, value: Variant) 🔗

类似于call_thread_safe(),但用于设置属性。


void set_translation_domain_inherited() 🔗

使此节点从其父节点继承翻译域。如果此节点没有父节点,则将使用主翻译域。

这是所有节点的默认行为。调用Object.set_translation_domain()会禁用此行为。


void update_configuration_warnings() 🔗

刷新场景停靠区中为此节点显示的警告。使用get_configuration_warnings()自定义要显示的警告消息。