Object

Inherited By: ARVRServer, AudioServer, CameraServer, ClassDB, EditorFileSystemDirectory, EditorNavigationMeshGenerator, EditorSelection, EditorVCSInterface, Engine, Geometry, GodotSharp, IP, Input, InputMap, JNISingleton, JSON, JSONRPC, JavaClassWrapper, JavaScript, MainLoop, Marshalls, Node, OS, Performance, Physics2DDirectBodyState, Physics2DDirectSpaceState, Physics2DServer, PhysicsDirectBodyState, PhysicsDirectSpaceState, PhysicsServer, ProjectSettings, Reference, ResourceLoader, ResourceSaver, Time, TranslationServer, TreeItem, UndoRedo, VisualScriptEditor, VisualServer

所有非内置类型的基类。

描述

每个不是内置类型的类都继承自这个类。

您可以从脚本语言构造对象,使用 GDScript 中的 Object.new()、C# 中的 new Object 或 VisualScript 中的“构造对象”节点。

对象不管理内存。如果类继承自 Object,则必须手动删除它的实例。为此,请从您的脚本中调用 free 方法或从 C++ 中删除该实例。

一些继承 Object 的类添加了内存管理。 Reference 就是这种情况,它对引用进行计数,并在不再被引用时自动删除自己。 Node 是另一种基本类型,在从内存中释放时删除其所有子节点。

对象导出属性,这些属性主要用于存储和编辑,但在编程中并不是那么有用。属性在 _get_property_list 中导出并在 _get_set 中处理。然而,脚本语言和 C++ 有更简单的方法来导出它们。

在GDScript中可以使用 in 直接测试属性成员。

var n = Node2D.new()
print("position" in n) # 打印 "True"。
print("other_property" in n) # 打印 "False"。

只要键存在,in 运算符将评估为 true,即使值为 null

对象也会收到通知。通知是一种将不同事件通知给对象的简单方法,因此它们可以一起处理。见 _notification

注意: 与对 Reference 的引用不同,对存储在变量中的对象的引用可能会在没有警告的情况下变得无效。因此,建议对数据类使用 Reference 而不是 Object

注意:由于一个错误,你不能使用 Object.new() 创建一个“普通”对象。请使用 ClassDB.instance("Object")。这个错误只适用于Object本身,而不是它的任何子类,如Reference

方法

Variant

_get ( String property ) virtual

Array

_get_property_list ( ) virtual

void

_init ( ) virtual

void

_notification ( int what ) virtual

bool

_set ( String property, Variant value ) virtual

String

_to_string ( ) virtual

void

add_user_signal ( String signal, Array arguments=[ ] )

Variant

call ( String method, ... ) vararg

void

call_deferred ( String method, ... ) vararg

Variant

callv ( String method, Array arg_array )

bool

can_translate_messages ( ) const

Error

connect ( String signal, Object target, String method, Array binds=[ ], int flags=0 )

void

disconnect ( String signal, Object target, String method )

void

emit_signal ( String signal, ... ) vararg

void

free ( )

Variant

get ( String property ) const

String

get_class ( ) const

Array

get_incoming_connections ( ) const

Variant

get_indexed ( NodePath property ) const

int

get_instance_id ( ) const

Variant

get_meta ( String name ) const

PoolStringArray

get_meta_list ( ) const

Array

get_method_list ( ) const

Array

get_property_list ( ) const

Reference

get_script ( ) const

Array

get_signal_connection_list ( String signal ) const

Array

get_signal_list ( ) const

bool

has_meta ( String name ) const

bool

has_method ( String method ) const

bool

has_signal ( String signal ) const

bool

has_user_signal ( String signal ) const

bool

is_blocking_signals ( ) const

bool

is_class ( String class ) const

bool

is_connected ( String signal, Object target, String method ) const

bool

is_queued_for_deletion ( ) const

void

notification ( int what, bool reversed=false )

void

property_list_changed_notify ( )

void

remove_meta ( String name )

void

set ( String property, Variant value )

void

set_block_signals ( bool enable )

void

set_deferred ( String property, Variant value )

void

set_indexed ( NodePath property, Variant value )

void

set_message_translation ( bool enable )

void

set_meta ( String name, Variant value )

void

set_script ( Reference script )

String

to_string ( )

String

tr ( String message ) const

信号

  • script_changed ( )

当对象的脚本被更改时触发。

枚举

enum ConnectFlags:

  • CONNECT_DEFERRED = 1 --- 在延迟模式下连接一个信号。这样,信号发射被储存在一个队列中,然后在空闲时间发出。

  • CONNECT_PERSIST = 2 --- 当对象序列化为文件时,将保存持久连接。

  • CONNECT_ONESHOT = 4 --- 信号触发后断开一次性连接。

  • CONNECT_REFERENCE_COUNTED = 8 --- 连接一个信号作为引用计数。这意味着一个给定的信号可以多次连接到同一个目标,并且只有在没有引用时才会完全断开连接。

常量

  • NOTIFICATION_POSTINITIALIZE = 0 --- 在对象初始化时调用。在脚本中不可用。

  • NOTIFICATION_PREDELETE = 1 --- 在要删除对象之前调用。

方法说明

虚方法,可以被重载以定制 get 的返回值。

返回给定的属性。如果 property 不存在,返回 null


  • Array _get_property_list ( ) virtual

虚方法,可以被重载以定制 get_property_list 的返回值。

返回对象的属性列表为一个 Array 的字典。

每个属性的 Dictionary 必须至少包含 name: Stringtype: int(见Variant.Type)条目。另外,它还可以包括 hint: int(见 PropertyHint)、hint_string: String,以及 usage: int(见 PropertyUsageFlags)。


  • void _init ( ) virtual

当对象被初始化时被调用。


  • void _notification ( int what ) virtual

每当对象收到一个通知时就会被调用,这个通知在what中由一个常量来标识。基类 Object 有两个常量 NOTIFICATION_POSTINITIALIZENOTIFICATION_PREDELETE,但是诸如 Node 等子类定义了更多的通知,这些通知也是由这个方法接收。


虚方法,可以被重载以定制 set 的返回值。

设置一个属性。如果 property 存在,返回 true


  • String _to_string ( ) virtual

虚方法,可以被重载以定制 to_string 的返回值,从而在对象被转换为字符串的地方,例如用 print(obj) 表示。

返回一个代表该对象的 String 字符串。如果没有被覆盖,默认为 "[ClassName:RID]"


  • void add_user_signal ( String signal, Array arguments=[ ] )

添加一个用户定义的signal。参数是可选的,但可以作为一个字典的Array来添加,每个字典包含name: Stringtype: int(见Variant.Type)条目。


在对象上调用method并返回结果。这个方法支持可变数量的参数,所以参数以逗号分隔的列表形式传递。下面是个实例:

call("set", "position", Vector2(42.0, 0.0))

注意: 在C#中,如果方法是由内置的Godot节点定义的,那么方法名必须被指定为snake_case。这不适用于用户定义的方法,在那里你应该使用与C#源代码中相同的约定(通常是PascalCase)。


  • void call_deferred ( String method, ... ) vararg

在空闲时间调用对象上的method。这个方法支持可变数量的参数,所以参数是以逗号分隔的列表形式传递。下面是个例子:

call_deferred("set", "position", Vector2(42.0, 0.0))

注意: 在C#中,如果方法名称是由内置的Godot节点定义的,必须指定为snake_case。这不适用于用户定义的方法,在那里你应该使用与C#源代码中相同的约定(通常是PascalCase)。


在对象上调用method并返回结果。与call相反,这个方法不支持可变数量的参数,而是期望所有的参数都通过一个Array

callv("set", [ "position", Vector2(42.0, 0.0) ])

  • bool can_translate_messages ( ) const

如果该对象可以翻译字符串,则返回true。参阅set_message_translationtr


将信号 signal 连接到目标 target 对象上的方法 method。将可选的绑定 binds 作为一个 Array 的参数传递给调用。这些参数将在调用 emit_signal 中使用的任何参数之后传递给方法。使用 flags 设置延迟或一次性连接。请参阅 ConnectFlags 常量。

一个信号 signal 与同一方法 method 只能连接一次。除非之前在连接信号时使用了 CONNECT_REFERENCE_COUNTED,否则在进行重复连接时会抛出错误。为避免这种情况,首先使用 is_connected 检查是否已有连接。

如果 target 在游戏生命周期中被销毁,连接将丢失。

例子:

connect("pressed", self, "_on_Button_pressed") # BaseButton 信号
connect("text_entered", self, "_on_LineEdit_text_entered") # LineEdit 信号
connect("hit", self, "_on_Player_hit", [ Weapon_type, damage ]) # 用户自定义信号

传递给 connectbinds 与调用 emit_signal 时使用的参数的关系示例:

connect("hit", self, "_on_Player_hit", [ Weapon_type, damage ]) # 武器类型和伤害最后传递
emit_signal("hit", "Dark lord", 5) # 先传递 "Dark lord" 和 5
func _on_Player_hit(hit_by, level, Weapon_type, damage):
    print("被 %s(等级 %d)使用武器 %s 击中,造成 %d 点伤害" % [hit_by, level, weapon_type, damage])

信号 与给定 目标 上的 方法 断开。

如果您尝试断开不存在的连接,该方法将引发错误。使用 is_connected 确保连接存在。


  • void emit_signal ( String signal, ... ) vararg

发射给定的信号。这个信号必须存在,所以它应该是这个类或其父类中的一个内置信号,或者是一个用户定义的信号。这个方法支持可变数量的参数,所以参数是以逗号分隔的列表形式传递。例子。

emit_signal("hit", weapon_type, damage)
emit_signal("game_over")

  • void free ( )

立即从内存中删除对象。对于 Node,您可能希望使用 Node.queue_free 将节点排队以在当前帧的末尾安全删除。

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


返回给定propertyVariant值。如果该property不存在,这将返回null

注意: 在C#中,如果属性是由内置的Godot节点定义的,那么属性名必须被指定为snake_case。这不适用于用户定义的属性,在那里你应该使用与C#源代码中相同的约定(通常是PascalCase)。


返回对象的类型为一个String。参见is_class

注意: get_class 不考虑class_name的声明。如果对象有一个class_name的定义,基类名称将被返回。


  • Array get_incoming_connections ( ) const

返回一个 Array,元素为字典,包含与该对象相连的信号信息。

每个 Dictionary 包含三个字符串条目。

  • source 是对信号发出者的引用。

  • signal_name 是连接信号的名称。

  • method_name 是信号所连接的方法的名称。


获取由给定的 NodePath 索引的对象的属性。节点路径应该是相对于当前对象的,可以使用冒号字符(:)来访问嵌套属性。例如:"position:x""material:next_pass:blend_mode"

注意:虽然该方法的参数是 NodePath 节点路径,但是它实际并不支持指向场景树中 Node 节点的路径,只能使用冒号分隔的子属性路径。针对节点的话,请改用 Node.get_node_and_resource


  • int get_instance_id ( ) const

返回对象的唯一实例ID。

这个ID可以保存在EncodedObjectAsID中,并且可以用@GDScript.instance_from_id来检索对象实例。


返回给定name的对象的元数据条目。


将该对象的元数据作为 PoolStringArray 返回。


  • Array get_method_list ( ) const

将该对象的方法及其签名作为 Array 返回。


  • Array get_property_list ( ) const

将该对象的属性列表作为 Array 返回,元素为字典。

每个属性的 Dictionary 至少包含 name: Stringtype: int(见 Variant.Type)条目。另外,它还可以包括 hint: int(见PropertyHint)、hint_string: String,以及usage: int(见PropertyUsageFlags)。


返回该对象的Script实例,如果没有指定,则返回null


  • Array get_signal_connection_list ( String signal ) const

返回给定signal的连接的Array


  • Array get_signal_list ( ) const

将信号列表作为 Array 返回,元素为字典。


如果找到一个具有给定name的元数据条目,则返回true


如果对象包含给定的method,返回true


如果给定的signal存在,返回true


如果给定的用户定义的signal存在,返回true。只有使用add_user_signal添加的信号才被考虑在内。


  • bool is_blocking_signals ( ) const

如果启用了信号发射阻断,则返回true


如果对象从给定的 class 中继承,则返回 true。另请参阅 get_class

注: is_class 没有考虑 class_name 声明。如果对象有 class_name 定义,is_class 将为该名称返回 false


如果给定 信号目标方法 存在连接,则返回 true


  • bool is_queued_for_deletion ( ) const

如果为该对象调用了Node.queue_free方法,返回true


  • void notification ( int what, bool reversed=false )

向对象发送一个给定的通知,这也将触发对该对象继承的所有类的_notification方法的调用。

如果reversedtrue_notification首先在对象自己的类上被调用,然后再到其连续的父类上。如果reversedfalse_notification首先在最高的祖先(Object本身)上被调用,然后向下到其连续的继承类。


  • void property_list_changed_notify ( )

通知编辑器属性列表已经改变,以便编辑器插件能够考虑到新的值。在导出构建时没有任何作用。


  • void remove_meta ( String name )

从对象的元数据中删除给定条目。另见 set_meta


为给定的属性赋一个新值。如果 property 不存在,则不会发生任何事情。

注意:在 C# 中,如果属性名由内置的 Godot 节点定义,则必须将其指定为 snake_case。这不适用于用户定义的属性,在这些属性中,您应该使用与 C# 源中相同的约定(通常是 PascalCase)。


  • void set_block_signals ( bool enable )

如果设置为true,信号发射被阻止。


在当前帧的物理完成之后,将给定属性赋一个新值。这相当于通过call_deferred调用set,即call_deferred("set", property, value)

注意:在c#中,属性名必须指定为snake_case,如果它是由内置的Godot节点定义的。这并不适用于用户定义的属性,因为您应该使用与c#源代码(通常是PascalCase)相同的约定。


NodePath标识的属性分配一个新值。节点路径应该相对于当前对象,可以使用冒号(:)访问嵌套属性。举例如下:

set_indexed("position", Vector2(42, 0))
set_indexed("position:y", -10)
print(position) # (42, -10)

  • void set_message_translation ( bool enable )

定义对象是否可以转换字符串(通过调用tr)。默认启用。


添加、更改或删除对象元数据中的给定条目。元数据被序列化并且可以采用任何 Variant 值。

要从对象的元数据中删除给定条目,请使用 remove_meta。如果元数据的值设置为 null,也会删除元数据。这意味着您还可以使用 set_meta("name", null) 删除 "name" 的元数据。


将脚本分配给对象。每个对象都可以有一个分配给它的脚本,用于扩展其功能。

如果对象已经有一个脚本,则前一个脚本实例将被释放,它的变量和状态将丢失。新脚本的_init方法将被调用。


返回一个表示对象的 String。如果没有覆盖,默认为 "[ClassName:RID]"

可以通过重写 _to_string 方法来自定义 String 表示。


使用在项目设置中配置的翻译目录翻译消息。

仅在启用消息翻译时(默认如此)有效,否则返回未修改的 message。请参阅 set_message_translation