Node

Inherits: Object

Inherited By: AnimationPlayer, AnimationTree, AnimationTreePlayer, AudioStreamPlayer, CanvasItem, CanvasLayer, EditorFileSystem, EditorInterface, EditorPlugin, EditorResourcePreview, HTTPRequest, InstancePlaceholder, ResourcePreloader, SkeletonIK, Spatial, Timer, Tween, Viewport, WorldEnvironment

所有场景对象的基类。

描述

节点是 Godot 的构建模块。它们可以被指定为另一个节点的子节点,从而形成树状排列。一个给定的节点可以包含任意数量的节点作为子节点,要求所有的兄弟节点(即该节点的直接子节点)的名字唯一。

节点树被称为场景。场景可以被保存到磁盘上,然后被实例化到其他场景中。这使得 Godot 项目的架构和数据模型具有非常高的灵活性。

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

一旦所有的节点被添加到场景树中,它们就会收到 NOTIFICATION_READY 通知,其各自的 _ready 回调被触发。对于一组节点,_ready 回调是按相反的顺序调用的,从子节点开始,向上移动到父节点。

这意味着,当把一个节点添加到场景树中时,将使用下面的顺序进行回调:父节点的 _enter_tree、子节点的 _enter_tree、子节点的 _ready,最后是父节点的 _ready(对整个场景树进行递归)。

处理: 节点可以覆盖“处理”状态,以便它们在每一帧上都收到回调,要求它们进行处理(做一些事情)。普通处理(回调 _process,可以使用 set_process 开关)会尽可能快地发生,并且取决于帧率,所以处理时间 delta(单位为秒)会作为参数传入。物理处理(回调 _physics_process,可以使用 set_physics_process 开关)每秒发生固定次数(默认为 60),对物理引擎相关的代码很有用。

节点也可以处理输入事件。存在 _input 函数时,程序每收到一次输入都会去调用它。在许多情况下,这么做是大材小用了(除非是用于简单的项目),用 _unhandled_input 函数可能更合适;当输入事件没有被其他节点(通常是 GUI Control 节点)处理时,才会调用这个函数,可以确保节点只接收到它该收到的事件。

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

最后,当一个节点被 Object.freequeue_free 释放时,它也将释放它的所有子节点。

分组: 节点可以被添加到很多的组中,以方便管理,你可以根据自己游戏的需要来创建类似“敌人”或“收集品”这样的组。参阅 add_to_groupis_in_groupremove_from_group。加入组后,你可以检索这些组中的所有节点,对它们进行迭代,甚至通过 SceneTree 中的方法调用组内方法。

节点的网络编程: 在连接到服务器(或制作服务器,参阅 NetworkedMultiplayerENet)之后,可以使用内置的 RPC(远程过程调用)系统在网络上进行通信。在调用 rpc 时传入方法名,将在本地和所有已连接的对等体中调用对应的方法(对等体=客户端和接受连接的服务器)。为了识别哪个节点收到 RPC 调用,Godot 将使用它的 NodePath(请确保所有对等体上的节点名称相同)。另外,请参阅高级网络教程和相应的演示。

教程

属性

MultiplayerAPI

custom_multiplayer

String

filename

MultiplayerAPI

multiplayer

String

name

Node

owner

PauseMode

pause_mode

0

int

process_priority

0

方法

void

_enter_tree ( ) virtual

void

_exit_tree ( ) virtual

String

_get_configuration_warning ( ) virtual

void

_input ( InputEvent event ) virtual

void

_physics_process ( float delta ) virtual

void

_process ( float delta ) virtual

void

_ready ( ) virtual

void

_unhandled_input ( InputEvent event ) virtual

void

_unhandled_key_input ( InputEventKey event ) virtual

void

add_child ( Node node, bool legible_unique_name=false )

void

add_child_below_node ( Node node, Node child_node, bool legible_unique_name=false )

void

add_to_group ( String group, bool persistent=false )

bool

can_process ( ) const

Node

duplicate ( int flags=15 ) const

Node

find_node ( String mask, bool recursive=true, bool owned=true ) const

Node

find_parent ( String mask ) const

Node

get_child ( int idx ) const

int

get_child_count ( ) const

Array

get_children ( ) const

Array

get_groups ( ) const

int

get_index ( ) const

int

get_network_master ( ) const

Node

get_node ( NodePath path ) const

Array

get_node_and_resource ( NodePath path )

Node

get_node_or_null ( NodePath path ) const

Node

get_parent ( ) const

NodePath

get_path ( ) const

NodePath

get_path_to ( Node node ) const

float

get_physics_process_delta_time ( ) const

int

get_position_in_parent ( ) const

float

get_process_delta_time ( ) const

bool

get_scene_instance_load_placeholder ( ) const

SceneTree

get_tree ( ) const

Viewport

get_viewport ( ) const

bool

has_node ( NodePath path ) const

bool

has_node_and_resource ( NodePath path ) const

bool

is_a_parent_of ( Node node ) const

bool

is_displayed_folded ( ) const

bool

is_greater_than ( Node node ) const

bool

is_in_group ( String group ) const

bool

is_inside_tree ( ) const

bool

is_network_master ( ) 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_unhandled_input ( ) const

bool

is_processing_unhandled_key_input ( ) const

void

move_child ( Node child_node, int to_position )

void

print_stray_nodes ( )

void

print_tree ( )

void

print_tree_pretty ( )

void

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

void

propagate_notification ( int what )

void

queue_free ( )

void

raise ( )

void

remove_and_skip ( )

void

remove_child ( Node node )

void

remove_from_group ( String group )

void

replace_by ( Node node, bool keep_data=false )

void

request_ready ( )

Variant

rpc ( String method, … ) vararg

void

rpc_config ( String method, RPCMode mode )

Variant

rpc_id ( int peer_id, String method, … ) vararg

Variant

rpc_unreliable ( String method, … ) vararg

Variant

rpc_unreliable_id ( int peer_id, String method, … ) vararg

void

rset ( String property, Variant value )

void

rset_config ( String property, RPCMode mode )

void

rset_id ( int peer_id, String property, Variant value )

void

rset_unreliable ( String property, Variant value )

void

rset_unreliable_id ( int peer_id, String property, Variant value )

void

set_display_folded ( bool fold )

void

set_network_master ( int id, bool recursive=true )

void

set_physics_process ( bool enable )

void

set_physics_process_internal ( bool enable )

void

set_process ( bool enable )

void

set_process_input ( bool enable )

void

set_process_internal ( bool enable )

void

set_process_unhandled_input ( bool enable )

void

set_process_unhandled_key_input ( bool enable )

void

set_scene_instance_load_placeholder ( bool load_placeholder )

void

update_configuration_warning ( )

信号

  • ready ( )

当节点准备好时触发。


  • renamed ( )

在重命名节点时触发。


  • tree_entered ( )

当节点进入树时触发。


  • tree_exited ( )

在节点退出树之后触发,并且不再处于活动状态。


  • tree_exiting ( )

当节点仍处于活动状态但即将退出树时发出。这是反初始化的正确位置(如果愿意,也可以称之为“析构函数”)。

枚举

enum PauseMode:

  • PAUSE_MODE_INHERIT = 0 —- 继承节点的父节点的暂停模式。对于根节点,它相当于PAUSE_MODE_STOP。默认值。

  • PAUSE_MODE_STOP = 1 —- 当 SceneTree 被暂停时,停止 process。

  • PAUSE_MODE_PROCESS = 2 —- 不管 SceneTree 的暂停状态如何,继续 process。


enum DuplicateFlags:

  • DUPLICATE_SIGNALS = 1 —- 复制该节点的信号。

  • DUPLICATE_GROUPS = 2 —- 复制节点的组。

  • DUPLICATE_SCRIPTS = 4 —- 复制该节点的脚本。

  • DUPLICATE_USE_INSTANCING = 8 —- 使用实例化进行复制。

实例与原件保持链接,因此当原件发生变化时,实例也会发生变化。

常量

  • NOTIFICATION_ENTER_TREE = 10 —- 当节点进入 SceneTree 时收到该通知。

  • NOTIFICATION_EXIT_TREE = 11 —- 当节点即将退出 SceneTree 时收到该通知。

  • NOTIFICATION_MOVED_IN_PARENT = 12 —- 在父节点中移动节点时收到该通知。

  • NOTIFICATION_READY = 13 —- 当节点就绪时接收到通知。请参阅 _ready

  • NOTIFICATION_PAUSED = 14 —- 暂停节点时接收到的通知。

  • NOTIFICATION_UNPAUSED = 15 —- 节点暂停时收到该通知。

  • NOTIFICATION_PHYSICS_PROCESS = 16 —- 当 physics process flag 被设置时,每一帧都会收到该通知(见set_physics_process)。

  • NOTIFICATION_PROCESS = 17 —- 当 process flag 被设置时,每一帧都收到通知(见set_process)。

  • NOTIFICATION_PARENTED = 18 —- 当一个节点被设置为另一个节点的子节点时收到该通知。

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

  • NOTIFICATION_UNPARENTED = 19 —- 当节点失去父节点时收到的通知(父节点将其从子节点列表中删除)。

  • NOTIFICATION_INSTANCED = 20 —- 节点被实例化时收到的通知。

  • NOTIFICATION_DRAG_BEGIN = 21 —- 拖动开始时收到的通知。

  • NOTIFICATION_DRAG_END = 22 —- 拖动结束时收到的通知。

  • NOTIFICATION_PATH_CHANGED = 23 —- 当节点的 NodePath 改变时收到的通知。

  • NOTIFICATION_INTERNAL_PROCESS = 25 —- 当 internal process flag 被设置时,每一帧都收到通知(见set_process_internal)。

  • NOTIFICATION_INTERNAL_PHYSICS_PROCESS = 26 —- 当 internal physics process flag 被设置时,每一帧都会收到通知(见set_physics_process_internal)。

  • NOTIFICATION_POST_ENTER_TREE = 27 —- 在节点准备好时收到通知,就在收到NOTIFICATION_READY之前。与后者不同,它每次节点进入树时都会发送,而不是只发送一次。

  • NOTIFICATION_WM_MOUSE_ENTER = 1002 —- 当鼠标进入游戏窗口时从操作系统收到的通知。

在桌面和网络平台上实现。

  • NOTIFICATION_WM_MOUSE_EXIT = 1003 —- 当鼠标离开游戏窗口时从操作系统收到的通知。

在桌面和网络平台上实现。

  • NOTIFICATION_WM_FOCUS_IN = 1004 —- 当游戏窗口获得焦点时,从操作系统收到的通知。

在所有平台上实现。

  • NOTIFICATION_WM_FOCUS_OUT = 1005 —- 当游戏窗口未获得焦点时,从操作系统收到的通知。

在所有平台上实现。

  • NOTIFICATION_WM_QUIT_REQUEST = 1006 —- 发出退出请求时,从操作系统收到的通知(例如用“关闭”按钮或 Alt+F4 关闭窗口)。

在桌面平台上实现。

  • NOTIFICATION_WM_GO_BACK_REQUEST = 1007 —- 当发出返回请求时,从操作系统收到的通知(例如在 Android 系统上按下“返回”按钮)。

Android 平台特供。

  • NOTIFICATION_WM_UNFOCUS_REQUEST = 1008 —- 当取消焦点的请求被发送时,从操作系统收到的通知(例如,另一个操作系统窗口想要得到焦点)。

目前没有支持的平台发送这个通知。

  • NOTIFICATION_OS_MEMORY_WARNING = 1009 —- 当应用程序超过其分配的内存时,从操作系统收到的通知。

专用于 iOS 平台。

  • NOTIFICATION_TRANSLATION_CHANGED = 1010 —- 当翻译可能发生变化时收到的通知。可以由用户改变区域设置来触发。可以用来响应语言的变化,例如,实时改变 UI 字符串。在使用内置的翻译支持时很有用,比如 Object.tr

  • NOTIFICATION_WM_ABOUT = 1011 —- 当发送“关于”信息的请求时,从操作系统收到的通知。

特定于 macOS 平台。

  • NOTIFICATION_CRASH = 1012 —- 当引擎即将崩溃时,从Godot的崩溃处理程序收到的通知。

如果崩溃处理程序被启用,这只会在桌面平台上实现。

  • NOTIFICATION_OS_IME_UPDATE = 1013 —- 当输入法引擎发生更新时,从操作系统收到的通知(例如,IME光标位置或组成字符串的变化)。

特定于macOS平台。

  • NOTIFICATION_APP_RESUMED = 1014 —- 恢复应用时从操作系统收到的通知。

特定于 Android 平台。

  • NOTIFICATION_APP_PAUSED = 1015 —- 暂停应用时从操作系统收到的通知。

特定于 Android 平台。

属性说明

Setter

set_custom_multiplayer(value)

Getter

get_custom_multiplayer()

对默认的MultiplayerAPI的重写。设置为null可以使用默认的SceneTree


Setter

set_filename(value)

Getter

get_filename()

如果场景是从文件实例化的,则其最顶层节点包含在 filename 中加载它的绝对文件路径(例如 res://levels/1.tscn)。否则,filename 设置为空字符串。


Getter

get_multiplayer()

与该节点相关的MultiplayerAPI实例。要么是custom_multiplayer,要么是默认的SceneTree(如果在树内)。


Setter

set_name(value)

Getter

get_name()

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

注意: 自动生成的名称可能包含 @ 字符,在使用 add_child 时保留该字符用于唯一名称。手动设置名称时,将删除任何 @


Setter

set_owner(value)

Getter

get_owner()

节点的所有者。节点可以使用任何其他节点作为其所有者(只要是能够沿着场景树向上追溯到的有效父节点、祖父节点等)。(使用 PackedScene)保存节点时,所有它拥有的节点也会随之保存。由此即可通过实例化和子实例化来创建复杂的 SceneTree


Default

0

Setter

set_pause_mode(value)

Getter

get_pause_mode()

暂停模式。暂停 SceneTree 时该节点的行为。


  • int process_priority

Default

0

Setter

set_process_priority(value)

Getter

get_process_priority()

节点在已启用的处理回调(即 NOTIFICATION_PROCESSNOTIFICATION_PHYSICS_PROCESS 及其内部对应物)的执行顺序中的优先级。进程优先级值较低的节点将首先执行其处理回调。

方法说明

  • void _enter_tree ( ) virtual

当节点进入SceneTree时调用(例如实例化时,场景改变时,或者在脚本中调用add_child后)。如果节点有子节点,则首先调用它的_enter_tree回调函数,然后再调用子节点的回调函数。

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


  • void _exit_tree ( ) virtual

当节点即将离开SceneTree时被调用(例如,在释放、场景改变或在脚本中调用remove_child后)。如果该节点有子节点,它的_exit_tree回调将在所有子节点离开树后被最后调用。

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


  • String _get_configuration_warning ( ) virtual

如果覆盖该方法的脚本是一个tool脚本,那么从该方法返回的字符串将在Scene Dock中显示为一个警告。

返回一个空字符串不会产生警告。

当需要更新这个节点的警告时,调用update_configuration_warning


当有输入事件时被调用。输入事件通过节点树向上传播,直到一个节点消耗它。

只有当输入处理被启用时才会被调用,如果这个方法被重写,它就会自动完成,可以用set_process_input来切换。

要消耗输入事件并阻止它进一步传播到其他节点,可以调用SceneTree.set_input_as_handled

对于游戏输入,_unhandled_input_unhandled_key_input通常更适合,因为它们允许GUI首先拦截事件。

注意: 这个方法只有在节点存在于场景树中时才会被调用(也就是说,如果它非”孤儿”)。


  • void _physics_process ( float delta ) virtual

在主循环的物理处理步骤中被调用。物理处理意味着帧率与物理同步,即delta变量应该是常量。delta的单位是秒。

只有当物理处理被启用时才会被调用,如果这个方法被重写,就会自动完成,可以用set_physics_process来切换。

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

注意: 这个方法只有在节点存在于场景树中时才会被调用(也就是说,如果它不是”孤儿”)。


  • void _process ( float delta ) virtual

在主循环的处理步骤中被调用。处理发生在每一帧,并且尽可能快,所以从上一帧开始的delta时间不是恒定的。delta的单位是秒。

只有在启用处理的情况下才会被调用,如果这个方法被重写,会自动进行处理,可以用set_process来切换。

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

注意: 这个方法只有在节点存在于场景树中时才会被调用(也就是说,如果它不是”孤儿”)。


  • void _ready ( ) virtual

当节点 “就绪 “时被调用。子节点的_ready回调会首先被触发,而父节点会在之后收到就绪通知。

对应于Object._notification中的NOTIFICATION_READY通知。也请参阅变量的onready关键字。

通常用于初始化。对于更早的初始化,可以使用Object._init。也请参阅_enter_tree

注意: _ready 对于每个节点只能调用一次。在从场景树中删除一个节点并再次添加后,_ready将不会被第二次调用。这可以通过请求再次调用request_ready来绕过,它可以在再次添加节点之前的任何地方调用。


  • void _unhandled_input ( InputEvent event ) virtual

InputEvent还未被_input或任何GUI消耗时调用。输入事件通过节点树向上传播,直到一个节点消耗它。

只有在启用了未处理的输入处理时才会被调用,如果这个方法被重写,它就会自动完成,并且可以用set_process_unhandled_input来切换。

要消耗输入事件并阻止它进一步传播到其他节点,可以调用SceneTree.set_input_as_handled

对于游戏输入,这和_unhandled_key_input通常比_input更适合,因为它们允许GUI首先拦截事件。

注意: 这个方法只有在节点存在于场景树中时才会被调用(也就是说,如果它不是”孤儿”)。


InputEventKey没有被_input或任何GUI消耗时被调用。输入事件通过节点树向上传播,直到一个节点消耗它。

只有在启用了未处理的键输入处理时才会被调用,如果这个方法被重写,它就会自动完成,并且可以用set_process_unhandled_key_input来切换。

要消耗输入事件并阻止它进一步传播到其他节点,可以调用SceneTree.set_input_as_handled

对于游戏输入,这和_unhandled_input通常比_input更适合,因为它们允许GUI首先拦截事件。

注意: 这个方法只有在节点存在于场景树中时才会被调用(也就是说,如果它不是”孤儿”)。


  • void add_child ( Node node, bool legible_unique_name=false )

添加子节点。节点可以有任意数量的子节点,但是每个子节点必须有唯一的名字。当父节点被删除时,子节点会被自动删除,所以整个场景可以通过删除其最上面的节点而被删除。

如果legible_unique_nametrue,子节点将有一个基于被实例化的节点的名称,而不是其类型可读的名称。

注意: 如果子节点已经有父节点,该函数将失败。首先使用remove_child将节点从其当前的父节点中移除。如:

  1. if child_node.get_parent():
  2. child_node.get_parent().remove_child(child_node)
  3. add_child(child_node)

注意: 如果你想让一个子节点被持久化到PackedScene中,除了调用add_child外,还必须设置owner。这通常与工具脚本编辑器插件有关。如果调用add_child而不设置owner,新添加的Node在场景树中是不可见的,尽管它在2D/3D视图中可见。


  • void add_child_below_node ( Node node, Node child_node, bool legible_unique_name=false )

添加child_node作为子节点。该子节点在子节点列表中被置于给定的node之下。

如果legible_unique_nametrue,子节点将有一个基于被实例化的节点名称,而不是其类型可读的名称。


  • void add_to_group ( String group, bool persistent=false )

将节点添加到一个组中。组是命名和组织节点子集的辅助工具,例如“敌人”或“收集品”等。一个节点可以在任何数量的组中。节点可以在任何时候被分配到一个组中,但是在它们进入场景树之前不会被添加,参阅 is_inside_tree。参阅描述中的注释,以及 SceneTree 中的分组方法。

当把节点打包到 PackedScene 并保存到文件时,会使用 persistent 选项。非持久化的组不会被存储。

注意:由于性能原因,不保证节点组的顺序。不应该依赖节点组的顺序,因为每次运行项目节点组的顺序都可能变化。


  • bool can_process ( ) const

如果节点可以在场景树暂停时进行处理,返回true(见pause_mode)。如果场景树没有暂停,总是返回true,如果节点不在树中,则返回false


  • Node duplicate ( int flags=15 ) const

复制节点,返回一个新的节点。

你可以使用flags来微调这个行为(见DuplicateFlags)。

注意: 如果节点包含一个带有构造参数的脚本(即需要向Object._init方法提供参数),它将不能正常工作。在这种情况下,节点将被复制而没有脚本。


Finds a descendant of this node whose name matches mask as in String.match (i.e. case-sensitive, but "*" matches zero or more characters and "?" matches any single character except "."). Returns null if no matching Node is found.

Note: It does not match against the full path, just against individual node names.

If owned is true, this method only finds nodes whose owner is this node. This is especially important for scenes instantiated through a script, because those scenes don’t have an owner.

Note: As this method walks through all the descendants of the node, it is the slowest way to get a reference to another node. Whenever possible, consider using get_node instead. To avoid using find_node too often, consider caching the node reference into a variable.


查找当前节点的第一个父节点,其名称与String.match中的mask相匹配,区分大小写,其"*"匹配零或多个字符,"?"匹配任何单个字符,除了"."

注意:它不是全路径匹配,只与单个节点名称匹配。

注意:由于这个方法在场景树中向上行走,在大型的、深度嵌套的场景树中可能会很慢。只要有可能,请考虑使用get_node代替。为了避免过于频繁地使用find_parent,考虑将节点引用缓存到一个变量中。


按索引返回一个子节点(见get_child_count)。这个方法经常被用于遍历一个节点的所有子节点。

要通过一个子节点的名字访问它,请使用get_node


  • int get_child_count ( ) const

返回子节点的数目。


  • Array get_children ( ) const

返回节点的子节点的引用数组。


  • Array get_groups ( ) const

返回罗列该节点所在分组的数组。

注意:出于性能原因,不保证节点分组的顺序。不应该依赖节点分组的顺序,因为每次运行得到的顺序都可能不同。

注意:引擎内部会使用一些分组名称(均由下划线开头)。如果想避免与内部分组冲突,请勿添加名称以下划线开头的自定义分组。要在遍历 get_groups 时排除内部分组,请使用下面这段代码:

  1. # 只保存节点的非内部分组(字符串数组)。
  2. var non_internal_groups = []
  3. for group in get_groups():
  4. if not group.begins_with("_"):
  5. non_internal_groups.push_back(group)

  • int get_index ( ) const

返回节点的索引,即它在其父节点的兄弟节点中的位置。


  • int get_network_master ( ) const

返回此节点的网络主节点的对等 ID。请参阅 set_network_master


Fetches a node. The NodePath can be either a relative path (from the current node) or an absolute path (in the scene tree) to a node. If the path does not exist, null is returned and an error is logged. Attempts to access methods on the return value will result in an “Attempt to call <method> on a null instance.” error.

Note: Fetching absolute paths only works when the node is inside the scene tree (see is_inside_tree).

Example: Assume your current node is Character and the following tree:

  1. /root
  2. /root/Character
  3. /root/Character/Sword
  4. /root/Character/Backpack/Dagger
  5. /root/MyGame
  6. /root/Swamp/Alligator
  7. /root/Swamp/Mosquito
  8. /root/Swamp/Goblin

Possible paths are:

  1. get_node("Sword")
  2. get_node("Backpack/Dagger")
  3. get_node("../Swamp/Alligator")
  4. get_node("/root/MyGame")

获取一个节点及其由NodePath子名称指定的资源(例如Area2D/CollisionShape2D:shape)。如果在NodePath中指定了多个嵌套资源,则将获取最后一个。

返回值是一个大小为3的数组:第一个索引指向Node(或null),第二个索引指向Resource(或null),第三个索引是剩余的NodePath

例如,假设Area2D/CollisionShape2D是一个有效的节点,并且它的shape属性被分配了一个RectangleShape2D资源,可以有这样的输出:

  1. print(get_node_and_resource("Area2D/CollisionShape2D")) # [[CollisionShape2D:1161], Null, ]
  2. print(get_node_and_resource("Area2D/CollisionShape2D:shape")) # [[CollisionShape2D:1161], [RectangleShape2D:1156], ]
  3. print(get_node_and_resource("Area2D/CollisionShape2D:shape:extents")) # [[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]

类似于get_node,但如果路径没有指向有效的Node,则不会记录错误。


  • Node get_parent ( ) const

Returns the parent node of the current node, or null if the node lacks a parent.


返回当前节点的绝对路径。这只在当前节点在场景树中起作用(请参阅 is_inside_tree)。


从这个节点返回到指定的node的相对NodePath。两个节点必须在同一个场景中,否则函数将失败。


  • float get_physics_process_delta_time ( ) const

返回自上次物理绑定帧以来所经过的时间(单位为秒),参阅 _physics_process。在物理处理中,这始终是一个常数,除非通过 Engine.iterations_per_second 改变每秒的帧数。


  • int get_position_in_parent ( ) const

返回场景树分支中节点的顺序。例如,如果在第一个子节点上调用,则位置为0


  • float get_process_delta_time ( ) const

返回自上次进程回调以来经过的时间(以秒为单位)。这个值可能因帧而异。


  • bool get_scene_instance_load_placeholder ( ) const

如果这是一个实例加载占位符,则返回true。看到InstancePlaceholder


返回包含该节点的SceneTree


返回节点的Viewport


如果NodePath指向的节点存在,则返回true


如果NodePath指向一个有效的节点,并且它的子名称指向一个有效的资源,例如Area2D/CollisionShape2D:shape,则返回true。具有非Resource类型的属性(例如节点或基本数学类型)不被认为是资源。


  • bool is_a_parent_of ( Node node ) const

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


  • bool is_displayed_folded ( ) const

如果节点在场景dock中折叠(collapsed),则返回true


  • bool is_greater_than ( Node node ) const

如果给定节点在场景层次结构中出现的时间晚于当前节点,则返回true


如果该节点在指定的组中,则返回true。参阅描述中的注释和SceneTree中的组方法。


  • bool is_inside_tree ( ) const

如果该节点当前在SceneTree中,返回true


  • bool is_network_master ( ) const

如果本地系统是此节点的主系统(用于多人游戏),则返回true


  • bool is_physics_processing ( ) const

如果启用了物理处理,返回true(参阅set_physics_process)。


  • bool is_physics_processing_internal ( ) const

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


  • bool is_processing ( ) const

如果开启了处理,返回true(参阅set_process)。


  • bool is_processing_input ( ) const

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


  • bool is_processing_internal ( ) const

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


  • bool is_processing_unhandled_input ( ) const

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


  • bool is_processing_unhandled_key_input ( ) const

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


  • void move_child ( Node child_node, int to_position )

在其他子节点中将子节点移动到不同的位置(顺序)。由于调用、信号等是按树顺序执行的,因此更改子节点的顺序可能会很有用。


  • void print_stray_nodes ( )

打印所有散在节点(SceneTree之外的节点)。用于调试。只能在调试版本中工作。


  • void print_tree ( )

将树打印到标准输出。主要用于调试。这个版本显示相对于当前节点的路径,适合复制/粘贴到get_node函数中。

示例输出:

  1. TheGame
  2. TheGame/Menu
  3. TheGame/Menu/Label
  4. TheGame/Menu/Camera2D
  5. TheGame/SplashScreen
  6. TheGame/SplashScreen/Camera2D

  • void print_tree_pretty ( )

类似于print_tree,它将树打印到标准输出。这个版本显示更多的图形,类似于在场景检查器中显示的内容。它对于检查较大的树很有用。

输出示例:

  1. ┖╴TheGame
  2. ┠╴Menu
  3. ┠╴Label
  4. ┖╴Camera2D
  5. ┖╴SplashScreen
  6. ┖╴Camera2D

  • void propagate_call ( String method, Array args=[ ], bool parent_first=false )

在这个节点上使用args中给出的参数调用给定的方法(如果存在),并递归地在其所有子节点身上调用。如果parent_first参数为true,该方法将首先在当前节点上调用,然后在其所有子节点上调用。如果parent_firstfalse,子节点的方法将首先被调用。


  • void propagate_notification ( int what )

通过对所有节点调用Object.notification,递归地通知当前节点和它的所有子节点。


  • void queue_free ( )

在当前帧结束时排队删除一个节点。当删除时,其所有的子节点也将被删除。这个方法确保删除节点是安全的,与Object.free相反。使用Object.is_queued_for_deletion来检查一个节点是否会在帧末被删除。

重要: 如果你有变量指向节点,一旦节点被释放,它将不会 被分配到null。相反,它将指向一个先前被释放的实例,你应该在尝试调用其方法或访问其属性之前用@GDScript.is_instance_valid来验证它。


  • void raise ( )

将此节点移到父节点的子节点层次的底部。这在GUI(Control节点)中通常很有用,因为它们的绘制顺序取决于它们在树中的顺序。最上面的节点首先被绘制出来,然后在层次结构中最上面的节点下面的所有同级被依次绘制在它的上面。使用raise后,一个控件将被绘制在其同级的上面。


  • void remove_and_skip ( )

移除一个节点,并将其所有的子节点设置为父节点的子节点(如果它存在的话)。所有经过被删除的节点的事件订阅都将被取消。


  • void remove_child ( Node node )

删除一个子节点。该节点不会被删除,必须手动删除。

注:如果该owner不再是父节点或祖先,则该函数可以将被移除节点(或其后代)的owner设置为null


  • void remove_from_group ( String group )

将一个节点从一个组中移除。参阅描述中的注释,以及SceneTree中的组方法。


  • void replace_by ( Node node, bool keep_data=false )

Replaces a node in a scene by the given one. Subscriptions that pass through this node will be lost.

Note: The given node will become the new parent of any child nodes that the replaced node had.

Note: The replaced node is not automatically freed, so you either need to keep it in a variable for later use or free it using Object.free.


  • void request_ready ( )

请求再次调用_ready。注意,该方法不会被立即调用,而是被安排在该节点再次被添加到场景树时(见_ready)。_ready只为请求它的节点调用,这意味着如果你想让每个子节点也调用_ready,你需要为它们请求ready(在这种情况下,_ready的调用顺序与正常情况下相同)。


为给定的method向网络(和本地)上的对等体发送远程过程调用请求,可选择将所有附加参数作为参数发送给RPC调用的方法。调用请求将只被具有相同NodePath的节点接收,包括完全相同的节点名称。行为取决于给定方法的RPC配置,见rpc_config。方法在默认情况下不会暴露给RPC。参阅rsetrset_config的属性。返回一个空的Variant

注意:只有在你从SceneTree收到connected_to_server信号之后,你才能安全地在客户端使用RPC。你还需要跟踪连接状态,可以通过server_disconnectedSceneTree信号或者检查SceneTree.network_peer.get_connection_status() == CONNECTION_CONNECTED


method 方法的 RPC 模式改为 mode 模式。请参阅 RPCMode。另一种方法是在方法和属性上加入相应的关键字注解(remotemasterpuppetremoteesyncmasteryncpuppetsync)。默认情况下,方法不暴露于网络(和 RPC)。请参阅 rsetrset_config 的属性。


向由peer_id确定的特定peer发送一个rpc(见NetworkedMultiplayerPeer.set_target_peer)。返回一个空的Variant


使用一个不可靠的协议发送一个rpc。返回一个空的Variant


使用不可靠的协议(见NetworkedMultiplayerPeer.set_target_peer)向由peer_id标识的特定peer发送一个rpc。返回一个空的Variant


在其他对等体上远程改变一个属性的值(和本地)。行为取决于给定属性的RPC配置,见rset_config。关于方法的RPC,也请参阅rpc,大多数信息也适用于这个方法。


将给定的属性的RPC模式改为给定的mode。参阅RPCMode。另一种方法是用相应的关键字(remote, master, puppet, remoteesync, masterync, puppetsync)来注释方法和属性。默认情况下,属性不会暴露给网络(和RPC)。也请参阅rpcrpc_config的方法。


远程改变属性的值在一个指定的peer上peer_id(参阅NetworkedMultiplayerPeer.set_target_peer)。


使用不可靠的协议远程更改其他对等点(和本地)上的属性值。


使用不可靠的协议(参阅NetworkedMultiplayerPeer.set_target_peer)远程更改指定对等体peer_id上的属性值。


  • void set_display_folded ( bool fold )

设置场景dock中节点的折叠状态。


  • void set_network_master ( int id, bool recursive=true )

将节点的网络主节点设置为具有给定ID的对等体。网络主节点是对网络上的节点具有权威的对等体。与masterpuppet关键字一起使用很有用。默认情况下从父节点继承,父节点最终默认为peer ID 1(服务器)。如果recursive,则递归地将给定的对等节点设置为该节点所有子节点的主节点。


  • void set_physics_process ( bool enable )

启用或禁用物理处理(即固定帧率)。当一个节点被处理时,它将以一个固定的(通常是60FPS,参阅Engine.iterations_per_second来更改该值)时间间隔收到一个NOTIFICATION_PHYSICS_PROCESS(如果存在,_physics_process回调将被调用)。如果_physics_process被重写,则自动启用。在_ready之前对它的任何调用都将被忽略。


  • void set_physics_process_internal ( bool enable )

启用或禁用该节点的内部物理。内部物理处理与正常的_physics_process调用隔离进行,并且由某些节点内部使用,以确保正常工作,即使节点暂停或物理处理因脚本而禁用(set_physics_process)。仅适用于用于操纵内置节点行为的高级用途。

警告: 内置节点依靠内部处理来实现自己的逻辑,所以从你的代码中改变这个值可能会导致意外的行为。为特定的高级用途提供了对此内部逻辑的脚本访问,但不安全且不支持。


  • void set_process ( bool enable )

启用或禁用帧处理。当一个节点被处理时,它将在每个绘制的帧上收到一个NOTIFICATION_PROCESS(如果存在,_process回调将被调用)。如果_process被重写,则自动启用。在 _ready 之前对它的任何调用都将被忽略。


  • void set_process_input ( bool enable )

启用或禁用输入处理。对于GUI控件来说,这不是必需的。如果_input被重写,则自动启用。任何在_ready之前对它的调用都将被忽略。


  • void set_process_internal ( bool enable )

启用或禁用此节点的内部处理。内部处理与正常的 _process 调用隔离进行,并且由某些节点内部使用,以确保正常工作,即使节点已暂停或处理因脚本而禁用(set_process)。仅适用于操纵内置节点行为的高级用途。

警告: 内置节点依赖于内部处理来实现自己的逻辑,因此更改代码中的这个值可能会导致意外行为。为特定的高级用途提供了对此内部逻辑的脚本访问,但不安全且不支持。


  • void set_process_unhandled_input ( bool enable )

启用未处理的输入处理。这对GUI控件来说是不需要的! 它使节点能够接收所有以前没有处理的输入(通常是由Control处理的)。如果_unhandled_input被重载,则自动启用。在_ready之前对它的任何调用都将被忽略。


  • void set_process_unhandled_key_input ( bool enable )

启用未处理的按键输入处理。如果_unhandled_key_input被重写,则自动启用。任何在_ready之前对它的调用都将被忽略。


  • void set_scene_instance_load_placeholder ( bool load_placeholder )

设置这是否是一个实例加载占位符。参阅InstancePlaceholder


  • void update_configuration_warning ( )

更新在Scene Dock中为这个节点显示的警告。

使用_get_configuration_warning来设置要显示的警告信息。