Object

Наследуется от: AudioServer, CameraServer, ClassDB, DisplayServer, EditorFileSystemDirectory, EditorInterface, EditorPaths, EditorSelection, EditorUndoRedoManager, EditorVCSInterface, Engine, EngineDebugger, FramebufferCacheRD, GDExtensionManager, Geometry2D, Geometry3D, GodotInstance, Input, InputMap, IP, JavaClassWrapper, JavaScriptBridge, JNISingleton, JSONRPC, MainLoop, Marshalls, MovieWriter, NativeMenu, NavigationMeshGenerator, NavigationServer2D, NavigationServer2DManager, NavigationServer3D, NavigationServer3DManager, Node, OpenXRExtensionWrapper, OpenXRInteractionProfileMetadata, OS, Performance, PhysicsDirectBodyState2D, PhysicsDirectBodyState3D, PhysicsDirectSpaceState2D, PhysicsDirectSpaceState3D, PhysicsServer2D, PhysicsServer2DManager, PhysicsServer3D, PhysicsServer3DManager, PhysicsServer3DRenderingServerHandler, ProjectSettings, RefCounted, RenderData, RenderingDevice, RenderingServer, RenderSceneData, ResourceLoader, ResourceSaver, ResourceUID, ScriptLanguage, ShaderIncludeDB, TextServerManager, ThemeDB, TileData, Time, TranslationServer, TreeItem, UndoRedo, UniformSetCacheRD, WorkerThreadPool, XRServer, XRVRS

Базовый класс для всех остальных классов в движке.

Описание

Расширенный тип Variant. Все классы в движке наследуются от Object. Каждый класс может определять новые свойства, методы или сигналы, которые доступны всем наследующим классам. Например, экземпляр Sprite2D может вызывать Node.add_child(), поскольку он наследуется от Node.

Вы можете создавать новые экземпляры, используя Object.new() в GDScript или new GodotObject в C#.

Чтобы удалить экземпляр Object, вызовите free(). Это необходимо для большинства классов, наследующих Object, поскольку они не управляют памятью самостоятельно и в противном случае вызовут утечки памяти, если больше не используются. Есть несколько классов, которые выполняют управление памятью. Например, RefCounted (и, соответственно, Resource) удаляет себя, когда на него больше не ссылаются, а Node удаляет своих дочерних элементов при освобождении.

К объектам может быть прикреплен Script. После создания экземпляра Script он фактически действует как расширение базового класса, позволяя ему определять и наследовать новые свойства, методы и сигналы.

Внутри Script _get_property_list() может быть переопределен для настройки свойств несколькими способами. Это позволяет им быть доступными для редактора, отображаться в виде списков параметров, подразделяться на группы, сохранять на диске и т. д. Скриптовые языки предлагают более простые способы настройки свойств, например, с помощью аннотации @GDScript.@export.

Godot очень динамичен. Скрипт объекта, а следовательно, и его свойства, методы и сигналы, могут быть изменены во время выполнения. Из-за этого могут быть случаи, когда, например, свойство, требуемое методом, может не существовать. Чтобы предотвратить ошибки времени выполнения, см. такие методы, как set(), get(), call(), has_method(), has_signal() и т. д. Обратите внимание, что эти методы намного медленнее прямых ссылок.

В GDScript вы также можете проверить, существует ли заданное свойство, метод или имя сигнала в объекте с помощью оператора in:

var node = Node.new()
print("name" in node)         # Выводит true
print("get_parent" in node)   # Выводит true
print("tree_entered" in node) # Выводит true
print("unknown" in node)      # Выводит false

Уведомления — это константы int, которые обычно отправляются и принимаются объектами. Например, на каждом отрисованном кадре SceneTree уведомляет узлы внутри дерева с помощью Node.NOTIFICATION_PROCESS. Узлы получают его и могут вызывать Node._process() для обновления. Чтобы использовать уведомления, см. notification() и _notification().

Наконец, каждый объект также может содержать метаданные (данные о данных). set_meta() может быть полезен для хранения информации, от которой сам объект не зависит. Чтобы сохранить чистоту кода, не рекомендуется чрезмерно использовать метаданные.

Примечание: В отличие от ссылок на RefCounted, ссылки на объект, хранящийся в переменной, могут стать недействительными, не будучи установленными в null. Чтобы проверить, был ли объект удален, не сравнивайте его с null. Вместо этого используйте @GlobalScope.is_instance_valid(). Также рекомендуется наследовать от RefCounted для классов, хранящих данные вместо Object.

Примечание: script не отображается, как большинство свойств. Чтобы задать или получить Script объекта в коде, используйте set_script() и get_script() соответственно.

Примечание: В булевом контексте Object будет оцениваться как false, если он равен null или был освобожден. В противном случае Object всегда будет оцениваться как true. См. также @GlobalScope.is_instance_valid().

Обучающие материалы

Методы

Variant

_get(property: StringName) virtual

Array[Dictionary]

_get_property_list() virtual

void

_init() virtual

Variant

_iter_get(iter: Variant) virtual

bool

_iter_init(iter: Array) virtual

bool

_iter_next(iter: Array) virtual

void

_notification(what: int) virtual

bool

_property_can_revert(property: StringName) virtual

Variant

_property_get_revert(property: StringName) virtual

bool

_set(property: StringName, value: Variant) virtual

String

_to_string() virtual

void

_validate_property(property: Dictionary) virtual

void

add_user_signal(signal: String, arguments: Array = [])

Variant

call(method: StringName, ...) vararg

Variant

call_deferred(method: StringName, ...) vararg

Variant

callv(method: StringName, arg_array: Array)

bool

can_translate_messages() const

void

cancel_free()

Error

connect(signal: StringName, callable: Callable, flags: int = 0)

void

disconnect(signal: StringName, callable: Callable)

Error

emit_signal(signal: StringName, ...) vararg

void

free()

Variant

get(property: StringName) const

String

get_class() const

Array[Dictionary]

get_incoming_connections() const

Variant

get_indexed(property_path: NodePath) const

int

get_instance_id() const

Variant

get_meta(name: StringName, default: Variant = null) const

Array[StringName]

get_meta_list() const

int

get_method_argument_count(method: StringName) const

Array[Dictionary]

get_method_list() const

Array[Dictionary]

get_property_list() const

Variant

get_script() const

Array[Dictionary]

get_signal_connection_list(signal: StringName) const

Array[Dictionary]

get_signal_list() const

StringName

get_translation_domain() const

bool

has_connections(signal: StringName) const

bool

has_meta(name: StringName) const

bool

has_method(method: StringName) const

bool

has_signal(signal: StringName) const

bool

has_user_signal(signal: StringName) const

bool

is_blocking_signals() const

bool

is_class(class: String) const

bool

is_connected(signal: StringName, callable: Callable) const

bool

is_queued_for_deletion() const

void

notification(what: int, reversed: bool = false)

void

notify_property_list_changed()

bool

property_can_revert(property: StringName) const

Variant

property_get_revert(property: StringName) const

void

remove_meta(name: StringName)

void

remove_user_signal(signal: StringName)

void

set(property: StringName, value: Variant)

void

set_block_signals(enable: bool)

void

set_deferred(property: StringName, value: Variant)

void

set_indexed(property_path: NodePath, value: Variant)

void

set_message_translation(enable: bool)

void

set_meta(name: StringName, value: Variant)

void

set_script(script: Variant)

void

set_translation_domain(domain: StringName)

String

to_string()

String

tr(message: StringName, context: StringName = &"") const

String

tr_n(message: StringName, plural_message: StringName, n: int, context: StringName = &"") const


Сигналы

property_list_changed() 🔗

Вызывается при вызове notify_property_list_changed().


script_changed() 🔗

Вызывается при изменении скрипта объекта.

Примечание: Когда вызывается этот сигнал, новый скрипт еще не инициализирован. Если вам нужно получить доступ к новому скрипту, отложите подключения к этому сигналу с помощью CONNECT_DEFERRED.


Перечисления

enum ConnectFlags: 🔗

ConnectFlags CONNECT_DEFERRED = 1

Отложенные соединения активируют свои Callable во время простоя (в конце кадра), а не мгновенно.

ConnectFlags CONNECT_PERSIST = 2

Сохраняющиеся соединения сигналов сохраняются при сериализации объекта (например, при использовании PackedScene.pack()). В редакторе соединения, созданные через панель сигналов, всегда сохраняются.

Примечание: Соединения с лямбда-функциями (то есть, когда код функции встроен в вызов connect()) не могут быть сделаны постоянными.

ConnectFlags CONNECT_ONE_SHOT = 4

Одноразовые соединения автоматически отключаются после выброса.

ConnectFlags CONNECT_REFERENCE_COUNTED = 8

Ссылки-подсчетные соединения могут быть назначены одному и тому же Callable несколько раз. Каждое отключение уменьшает внутренний счетчик. Сигнал полностью отключается только тогда, когда счетчик достигает 0.

ConnectFlags CONNECT_APPEND_SOURCE_OBJECT = 16

On signal emission, the source object is automatically appended after the original arguments of the signal, regardless of the connected Callable's unbinds which affect only the original arguments of the signal (see Callable.unbind(), Callable.get_unbound_arguments_count()).

extends Object

signal test_signal

func test():
    print(self) # Prints e.g. <Object#35332818393>
    test_signal.connect(prints.unbind(1), CONNECT_APPEND_SOURCE_OBJECT)
    test_signal.emit("emit_arg_1", "emit_arg_2") # Prints emit_arg_1 <Object#35332818393>

Константы

NOTIFICATION_POSTINITIALIZE = 0 🔗

Уведомление получено при инициализации объекта, до присоединения его скрипта. Используется внутренне.

NOTIFICATION_PREDELETE = 1 🔗

Уведомление, полученное, когда объект собирается быть удален. Может использоваться как деструкторы в объектно-ориентированных языках программирования.

Это уведомление отправляется в обратном порядке.

NOTIFICATION_EXTENSION_RELOADED = 2 🔗

Уведомление получено, когда объект завершает горячую перезагрузку. Это уведомление отправляется только для классов расширений и производных.


Описания метода

Variant _get(property: StringName) virtual 🔗

Переопределите этот метод, чтобы настроить поведение метода get(). Он должен возвращать значение заданного свойства property или null, если свойство property должно обрабатываться обычным образом.

В сочетании с методами _set() и _get_property_list() этот метод позволяет определять пользовательские свойства, что особенно полезно для плагинов редактора.

Примечание: Этот метод не вызывается при получении встроенных свойств объекта, включая свойства, определенные с помощью аннотации @GDScript.@export.

func _get(property):
    if property == "fake_property":
        print("Getting my property!")
        return 4

func _get_property_list():
    return [
        { "name": "fake_property", "type": TYPE_INT }
    ]

Примечание: В отличие от других виртуальных методов, этот метод вызывается автоматически для каждого скрипта, который его переопределяет. Это означает, что базовую реализацию не следует вызывать через super в GDScript или его эквиваленты в других языках. Первым будет вызван самый нижний подкласс, а последующие вызовы будут происходить по иерархии классов. Цепочка вызовов остановится на первом классе, который вернет значение, отличное от null.


Array[Dictionary] _get_property_list() virtual 🔗

Переопределите этот метод, чтобы предоставить пользовательский список дополнительных свойств для обработки движком.

Должен возвращать список свойств в виде массива Array словарей. Результат добавляется в массив get_property_list() и должен быть отформатирован аналогичным образом. Каждый Dictionary должен содержать как минимум записи name и type.

Вы можете использовать методы _property_can_revert() и _property_get_revert() для настройки значений по умолчанию для свойств, добавляемых этим методом.

В приведенном ниже примере отображается список чисел, представленных словами, от ZERO до FIVE, при этом number_count управляет размером списка:

@tool
extends Node

@export var number_count = 3:
    set(nc):
        number_count = nc
        numbers.resize(number_count)
        notify_property_list_changed()

var numbers = PackedInt32Array([0, 0, 0])

func _get_property_list():
    var properties = []

    for i in range(number_count):
        properties.append({
            "name": "number_%d" % i,
            "type": TYPE_INT,
            "hint": PROPERTY_HINT_ENUM,
            "hint_string": "ZERO,ONE,TWO,THREE,FOUR,FIVE",
        })

    return properties

func _get(property):
    if property.begins_with("number_"):
        var index = property.get_slice("_", 1).to_int()
        return numbers[index]

func _set(property, value):
    if property.begins_with("number_"):
        var index = property.get_slice("_", 1).to_int()
        numbers[index] = value
        return true
    return false

Примечание: Этот метод предназначен для сложных задач. В большинстве распространенных случаев языки сценариев предлагают более простые способы обработки свойств. См. @GDScript.@export, @GDScript.@export_enum, @GDScript.@export_group и т. д. Если вы хотите настроить экспортируемые свойства, используйте _validate_property().

Примечание: Если скрипт объекта не является @GDScript.@tool, этот метод не будет вызываться в редакторе.

Примечание: В отличие от других виртуальных методов, этот метод вызывается автоматически для каждого скрипта, который его переопределяет. Это означает, что базовую реализацию не следует вызывать через super в GDScript или его эквиваленты в других языках. Сначала будет вызван самый нижний подкласс, а последующие вызовы будут происходить по иерархии классов.


void _init() virtual 🔗

Вызывается при создании экземпляра скрипта объекта, часто после инициализации объекта в памяти (через Object.new() в GDScript или new GodotObject в C#). Он также может быть определен для приема параметров. Этот метод похож на конструктор в большинстве языков программирования.

Примечание: Если _init() определен с обязательными параметрами, объект со скриптом может быть создан только напрямую. Если используются любые другие средства (например, PackedScene.instantiate() или Node.duplicate()), инициализация скрипта завершится ошибкой.


Variant _iter_get(iter: Variant) virtual 🔗

Возвращает текущее итерируемое значение. iter сохраняет состояние итерации, но в отличие от _iter_init() и _iter_next() состояние должно быть доступно только для чтения, поэтому нет оболочки Array.

Совет: В GDScript вы можете использовать подтип Variant в качестве возвращаемого типа для _iter_get(). Указанный тип будет использоваться для установки типа переменной итератора в циклах for, что повышает безопасность типов.


bool _iter_init(iter: Array) virtual 🔗

Инициализирует итератор. iter сохраняет состояние итерации. Поскольку GDScript не поддерживает передачу аргументов по ссылке, в качестве оболочки используется одноэлементный массив. Возвращает true до тех пор, пока итератор не достигнет конца.

class MyRange:
    var _from
    var _to

    func _init(from, to):
        assert(from <= to)
        _from = from
        _to = to

    func _iter_init(iter):
        iter[0] = _from
        return iter[0] < _to

    func _iter_next(iter):
        iter[0] += 1
        return iter[0] < _to

    func _iter_get(iter):
        return iter

func _ready():
    var my_range = MyRange.new(2, 5)
    for x in my_range:
        print(x) # Выводит 2, 3, 4.

Примечание: В качестве альтернативы вы можете игнорировать iter и вместо этого использовать состояние объекта, см. online docs для примера. Обратите внимание, что в этом случае вы не сможете повторно использовать один и тот же экземпляр итератора во вложенных циклах. Кроме того, убедитесь, что вы сбросили состояние итератора в этом методе, если вы хотите повторно использовать один и тот же экземпляр несколько раз.


bool _iter_next(iter: Array) virtual 🔗

Перемещает итератор на следующую итерацию. iter сохраняет состояние итерации. Поскольку GDScript не поддерживает передачу аргументов по ссылке, в качестве оболочки используется одноэлементный массив. Возвращает true до тех пор, пока итератор не достигнет конца.


void _notification(what: int) virtual 🔗

Вызывается, когда объект получает уведомление, которое можно определить в параметре what, сравнив его с константой. См. также notification().

func _notification(what):
    if what == NOTIFICATION_PREDELETE:
        print("До свидания!")

Примечание: Базовый класс Object определяет несколько уведомлений (NOTIFICATION_POSTINITIALIZE и NOTIFICATION_PREDELETE). Наследующие классы, такие как Node, определяют гораздо больше уведомлений, которые также принимаются этим методом.

Примечание: В отличие от других виртуальных методов, этот метод вызывается автоматически для каждого скрипта, который его переопределяет. Это означает, что базовую реализацию не следует вызывать через super в GDScript или его эквиваленты в других языках. Порядок вызова зависит от аргумента reversed метода notification() и варьируется для разных уведомлений. Большинство уведомлений отправляются в прямом порядке (т.е. сначала класс Object, затем наиболее производный класс).


bool _property_can_revert(property: StringName) virtual 🔗

Переопределите этот метод, чтобы настроить поведение отмены для заданного свойства property. Должен возвращать true, если свойство property имеет пользовательское значение по умолчанию и может быть отменено в панели инспектора. Используйте _property_get_revert(), чтобы указать значение по умолчанию для свойства property.

Примечание: Этот метод должен возвращать согласованное значение независимо от текущего значения свойства property.

Примечание: В отличие от других виртуальных методов, этот метод вызывается автоматически для каждого скрипта, который его переопределяет. Это означает, что базовая реализация не должна вызываться через super в GDScript или его эквивалентах в других языках. Сначала будет вызван самый нижний подкласс, а последующие вызовы будут происходить по иерархии классов. Цепочка вызовов остановится на первом классе, который вернет true.


Variant _property_get_revert(property: StringName) virtual 🔗

Переопределите этот метод, чтобы настроить поведение отмены для заданного свойства property. Должен возвращать значение по умолчанию для свойства property. Если значение по умолчанию отличается от текущего значения свойства property, в панели инспектора отображается значок отмены.

Примечание: Для вызова этого метода также необходимо переопределить метод _property_can_revert().

Примечание: В отличие от других виртуальных методов, этот метод вызывается автоматически для каждого скрипта, который его переопределяет. Это означает, что базовую реализацию не следует вызывать через super в GDScript или его эквиваленты в других языках. Сначала будет вызван самый нижний подкласс, а последующие вызовы будут происходить по иерархии классов. Цепочка вызовов остановится на первом классе, который вернет значение, отличное от null.


bool _set(property: StringName, value: Variant) virtual 🔗

Override this method to customize the behavior of set(). Should set the property to value and return true, or false if the property should be handled normally. The exact way to set the property is up to this method's implementation.

Combined with _get() and _get_property_list(), this method allows defining custom properties, which is particularly useful for editor plugins.

Note: This method is not called when setting built-in properties of an object, including properties defined with @GDScript.@export.

var internal_data = {}

func _set(property, value):
    if property == "fake_property":
        # Storing the value in the fake property.
        internal_data["fake_property"] = value
        return true
    return false

func _get_property_list():
    return [
        { "name": "fake_property", "type": TYPE_INT }
    ]

Note: Unlike other virtual methods, this method is called automatically for every script that overrides it. This means that the base implementation should not be called via super in GDScript or its equivalents in other languages. The bottom-most sub-class will be called first, with subsequent calls ascending the class hierarchy. The call chain will stop on the first class that returns true.


String _to_string() virtual 🔗

Переопределите этот метод, чтобы настроить возвращаемое значение метода to_string() и, следовательно, представление объекта как String.

func _to_string():
    return "Welcome to Godot 4!"

func _init():
    print(self)       # Выводит "Welcome to Godot 4!"
    var a = str(self) # a это "Welcome to Godot 4!"

void _validate_property(property: Dictionary) virtual 🔗

Переопределите этот метод, чтобы настроить существующие свойства. Каждая информация о свойствах проходит через этот метод, за исключением свойств, добавленных с помощью _get_property_list(). Содержимое словаря такое же, как в _get_property_list().

@tool
extends Node

@export var is_number_editable: bool:
    set(value):
        is_number_editable = value
        notify_property_list_changed()
@export var number: int

func _validate_property(property: Dictionary):
    if property.name == "number" and not is_number_editable:
        property.usage |= PROPERTY_USAGE_READ_ONLY

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

Добавляет определяемый пользователем сигнал с именем signal. Необязательные аргументы для сигнала могут быть добавлены как Array словарей, каждый из которых определяет name String и type int (см. Variant.Type). См. также has_user_signal() и remove_user_signal().

add_user_signal("hurt", [
    { "name": "damage", "type": TYPE_INT },
    { "name": "source", "type": TYPE_OBJECT }
])

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

Вызывает метод method для объекта и возвращает результат. Этот метод поддерживает переменное количество аргументов, поэтому параметры могут быть переданы в виде списка, разделенного запятыми.

var node = Node3D.new()
node.call("rotate", Vector3(1.0, 0.0, 0.0), 1.571)

Примечание: В C# method должен быть в snake_case при ссылке на встроенные методы Godot. Предпочитайте использовать имена, представленные в классе MethodName, чтобы избежать выделения нового StringName при каждом вызове.


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

Calls the method on the object during idle time. Always returns null, not the method's result.

Idle time happens mainly at the end of process and physics frames. In it, deferred calls will be run until there are none left, which means you can defer calls from other deferred calls and they'll still be run in the current idle time cycle. This means you should not call a method deferred from itself (or from a method called by it), as this causes infinite recursion the same way as if you had called the method directly.

This method supports a variable number of arguments, so parameters can be passed as a comma separated list.

var node = Node3D.new()
node.call_deferred("rotate", Vector3(1.0, 0.0, 0.0), 1.571)

For methods that are deferred from the same thread, the order of execution at idle time is identical to the order in which call_deferred was called.

See also Callable.call_deferred().

Note: In C#, method must be in snake_case when referring to built-in Godot methods. Prefer using the names exposed in the MethodName class to avoid allocating a new StringName on each call.

Note: If you're looking to delay the function call by a frame, refer to the SceneTree.process_frame and SceneTree.physics_frame signals.

var node = Node3D.new()
# Make a Callable and bind the arguments to the node's rotate() call.
var callable = node.rotate.bind(Vector3(1.0, 0.0, 0.0), 1.571)
# Connect the callable to the process_frame signal, so it gets called in the next process frame.
# CONNECT_ONE_SHOT makes sure it only gets called once instead of every frame.
get_tree().process_frame.connect(callable, CONNECT_ONE_SHOT)

Variant callv(method: StringName, arg_array: Array) 🔗

Вызывает method на объекте и возвращает результат. В отличие от call(), этот метод ожидает, что все параметры будут содержаться внутри arg_array.

var node = Node3D.new()
node.callv("rotate", [Vector3(1.0, 0.0, 0.0), 1.571])

Примечание: В C# method должен быть в snake_case при ссылке на встроенные методы Godot. Предпочитайте использовать имена, представленные в классе MethodName, чтобы избежать выделения нового StringName при каждом вызове.


bool can_translate_messages() const 🔗

Возвращает true, если объекту разрешено переводить сообщения с помощью tr() и tr_n(). См. также set_message_translation().


void cancel_free() 🔗

Если этот метод вызывается во время NOTIFICATION_PREDELETE, этот объект отклонит освобождение и останется выделенным. Это в основном внутренняя функция, используемая для обработки ошибок, чтобы пользователь не освобождал объекты, когда они не предназначены для этого.


Error connect(signal: StringName, callable: Callable, flags: int = 0) 🔗

Соединяет signal по имени с callable. Для настройки поведения соединения можно также добавить необязательные flags (см. константы ConnectFlags).

К одному и тому же Callable сигнал может быть подключен только один раз. Если сигнал уже подключен, этот метод возвращает @GlobalScope.ERR_INVALID_PARAMETER и генерирует ошибку, если только сигнал не подключен с CONNECT_REFERENCE_COUNTED. Чтобы предотвратить это, сначала используйте is_connected() для проверки существующих соединений.

Примечание: Если объект callable освобождается, соединение будет потеряно.

Примечание: В GDScript обычно рекомендуется подключать сигналы с помощью Signal.connect().

Примечание: Этот метод, как и все другие методы, связанные с сигналами, являются потокобезопасными.


void disconnect(signal: StringName, callable: Callable) 🔗

Отключает signal по имени от заданного callable. Если соединение не существует, генерирует ошибку. Используйте is_connected(), чтобы убедиться, что соединение существует.


Error emit_signal(signal: StringName, ...) vararg 🔗

Выдает заданный signal по имени. Сигнал должен существовать, поэтому он должен быть встроенным сигналом этого класса или одного из его унаследованных классов, или определяемым пользователем сигналом (см. add_user_signal()). Этот метод поддерживает переменное количество аргументов, поэтому параметры можно передавать в виде списка, разделенного запятыми.

Возвращает @GlobalScope.ERR_UNAVAILABLE, если signal не существует или параметры недопустимы.

emit_signal("hit", "sword", 100)
emit_signal("game_over")

Примечание: В C# signal должен быть в snake_case при ссылке на встроенные сигналы Godot. Предпочитайте использовать имена, представленные в классе SignalName, чтобы избежать выделения нового StringName при каждом вызове.


void free() 🔗

Удаляет объект из памяти. Существующие ранее ссылки на объект становятся недействительными, и любая попытка доступа к ним приведет к ошибке выполнения. Проверка ссылок с помощью @GlobalScope.is_instance_valid() вернет false. Это эквивалентно функции memdelete в GDExtension C++.


Variant get(property: StringName) const 🔗

Возвращает значение Variant указанного property. Если property не существует, этот метод возвращает null.

var node = Node2D.new()
node.rotation = 1.5
var a = node.get("rotation") # а равно 1,5

Примечание: В C# property должно быть в snake_case при ссылке на встроенные свойства Godot. Предпочитайте использовать имена, представленные в классе PropertyName, чтобы избежать выделения нового StringName при каждом вызове.


String get_class() const 🔗

Возвращает встроенное имя класса объекта в виде String. См. также is_class().

Примечание: Этот метод игнорирует объявления class_name. Если скрипт этого объекта определил class_name, вместо этого возвращается базовое встроенное имя класса.


Array[Dictionary] get_incoming_connections() const 🔗

Возвращает Array соединений сигналов, полученных этим объектом. Каждое соединение представлено как Dictionary, который содержит три записи:


Variant get_indexed(property_path: NodePath) const 🔗

Получает свойство объекта, индексированное заданным property_path. Путь должен быть NodePath относительно текущего объекта и может использовать символ двоеточия (:) для доступа к вложенным свойствам.

Примеры: "position:x" или "material:next_pass:blend_mode".

var node = Node2D.new()
node.position = Vector2(5, -10)
var a = node.get_indexed("position")   # а — это Vector2(5, -10)
var b = node.get_indexed("position:y") # b это -10

Примечание: В C# property_path должен быть в snake_case при ссылке на встроенные свойства Godot. Предпочитайте использовать имена, представленные в классе PropertyName, чтобы избежать выделения нового StringName при каждом вызове.

Примечание: Этот метод не поддерживает фактические пути к узлам в SceneTree, только пути подсвойств. В контексте узлов используйте вместо этого Node.get_node_and_resource().


int get_instance_id() const 🔗

Возвращает уникальный идентификатор экземпляра объекта. Этот идентификатор можно сохранить в EncodedObjectAsID и использовать для извлечения этого экземпляра объекта с помощью @GlobalScope.instance_from_id().

Примечание: Этот идентификатор полезен только во время текущего сеанса. Он не будет соответствовать похожему объекту, если идентификатор будет отправлен по сети или загружен из файла позднее.


Variant get_meta(name: StringName, default: Variant = null) const 🔗

Возвращает значение метаданных объекта для заданной записи name. Если запись не существует, возвращает default. Если default равен null, также генерируется ошибка.

Примечание: Имя метаданных должно быть допустимым идентификатором согласно методу StringName.is_valid_identifier().

Примечание: Метаданные, имя которых начинается с подчеркивания (_), считаются доступными только для редактора. Метаданные, доступные только для редактора, не отображаются в Инспекторе и не должны редактироваться, хотя их все равно можно найти с помощью этого метода.


Array[StringName] get_meta_list() const 🔗

Возвращает имена записей метаданных объекта в виде Array из StringName.


int get_method_argument_count(method: StringName) const 🔗

Возвращает количество аргументов указанного method по имени.

Примечание: В C# method должен быть в snake_case при ссылке на встроенные методы Godot. Предпочитайте использовать имена, представленные в классе MethodName, чтобы избежать выделения нового StringName при каждом вызове.


Array[Dictionary] get_method_list() const 🔗

Возвращает методы этого объекта и их сигнатуры как Array словарей. Каждый Dictionary содержит следующие записи:

  • name — имя метода, как String;

  • argsArray словарей, представляющих аргументы;

  • default_args — аргументы по умолчанию как Array вариантов;

  • flags — комбинация MethodFlags;

  • id — внутренний идентификатор метода int;

  • return — возвращаемое значение, как Dictionary;

Примечание: Словари args и return форматируются идентично результатам get_property_list(), хотя используются не все записи.


Array[Dictionary] get_property_list() const 🔗

Возвращает список свойств объекта как Array словарей. Каждый Dictionary содержит следующие записи:

  • name — имя свойства, как String;

  • class_name — пустой StringName, если свойство не является @GlobalScope.TYPE_OBJECT и не наследуется от класса;

  • type — тип свойства, как int (см. Variant.Type);

  • hintкак свойство должно редактироваться (см. PropertyHint);

  • hint_string зависит от подсказки (см. PropertyHint);

  • usage — комбинация PropertyUsageFlags.

Примечание: В GDScript все члены класса рассматриваются как свойства. В C# и GDExtension может потребоваться явно пометить члены класса как свойства Godot с помощью декораторов или атрибутов.


Variant get_script() const 🔗

Возвращает экземпляр Script объекта или null, если скрипт не прикреплен.


Array[Dictionary] get_signal_connection_list(signal: StringName) const 🔗

Возвращает Array соединений для заданного имени signal. Каждое соединение представлено как Dictionary, содержащий три записи:

  • signal — ссылка на Signal;

  • callable — ссылка на подключенный Callable;

  • flags — комбинация ConnectFlags.


Array[Dictionary] get_signal_list() const 🔗

Возвращает список существующих сигналов в виде массива словарей.

Примечание: Из-за особенностей реализации каждый словарь имеет формат, очень похожий на возвращаемые значения метода get_method_list().


StringName get_translation_domain() const 🔗

Возвращает имя домена перевода, используемого tr() и tr_n(). См. также TranslationServer.


bool has_connections(signal: StringName) const 🔗

Возвращает true, если существует какое-либо соединение по заданному имени signal.

Примечание: В C# signal должен быть в snake_case при ссылке на встроенные методы Godot. Предпочитайте использовать имена, представленные в классе SignalName, чтобы избежать выделения нового StringName при каждом вызове.


bool has_meta(name: StringName) const 🔗

Возвращает true, если найдена запись метаданных с указанным name. См. также get_meta(), set_meta() и remove_meta().

Примечание: Имя метаданных должно быть допустимым идентификатором согласно методу StringName.is_valid_identifier().

Примечание: Метаданные, имя которых начинается с подчеркивания (_), считаются доступными только для редактора. Доступные только для редактора метаданные не отображаются в Инспекторе и не должны редактироваться, хотя их все равно можно найти с помощью этого метода.


bool has_method(method: StringName) const 🔗

Возвращает true, если заданное имя method существует в объекте.

Примечание: В C# method должно быть в snake_case при ссылке на встроенные методы Godot. Предпочитайте использовать имена, представленные в классе MethodName, чтобы избежать выделения нового StringName при каждом вызове.


bool has_signal(signal: StringName) const 🔗

Возвращает true, если заданное имя signal существует в объекте.

Примечание: В C# signal должен быть в snake_case при ссылке на встроенные сигналы Godot. Предпочитайте использовать имена, представленные в классе SignalName, чтобы избежать выделения нового StringName при каждом вызове.


bool has_user_signal(signal: StringName) const 🔗

Возвращает true, если заданное пользователем имя signal существует. Включаются только сигналы, добавленные с помощью add_user_signal(). См. также remove_user_signal().


bool is_blocking_signals() const 🔗

Возвращает true, если объект блокирует передачу своих сигналов. См. set_block_signals().


bool is_class(class: String) const 🔗

Возвращает true, если объект наследуется от указанного class. См. также get_class().

var sprite2d = Sprite2D.new()
sprite2d.is_class("Sprite2D") # Возвращает true
sprite2d.is_class("Node")     # Возвращает true
sprite2d.is_class("Node3D")   # Возвращает false

Примечание: Этот метод игнорирует объявления class_name в скрипте объекта.


bool is_connected(signal: StringName, callable: Callable) const 🔗

Возвращает true, если существует связь между заданным именем signal и callable.

Примечание: В C# signal должен быть в snake_case при ссылке на встроенные сигналы Godot. Предпочитайте использовать имена, представленные в классе SignalName, чтобы избежать выделения нового StringName при каждом вызове.


bool is_queued_for_deletion() const 🔗

Возвращает true, если для объекта был вызван метод Node.queue_free().


void notification(what: int, reversed: bool = false) 🔗

Отправляет заданное уведомление what всем классам, унаследованным объектом, вызывая вызовы _notification(), начиная с наивысшего предка (класса Object) и спускаясь к скрипту объекта.

Если reversed равен true, порядок вызовов меняется на обратный.

var player = Node2D.new()
player.set_script(load("res://player.gd"))

player.notification(NOTIFICATION_ENTER_TREE)
# Порядок вызовов следующий: Object -> Node -> Node2D -> player.gd.

player.notification(NOTIFICATION_ENTER_TREE, true)
# Порядок вызовов следующий: player.gd -> Node2D -> Node -> Object.

void notify_property_list_changed() 🔗

Выдает сигнал property_list_changed. В основном он используется для обновления редактора, чтобы плагины Inspector и editor были обновлены должным образом.


bool property_can_revert(property: StringName) const 🔗

Возвращает true, если заданное property имеет пользовательское значение по умолчанию. Используйте property_get_revert(), чтобы получить значение по умолчанию для property.

Примечание: Этот метод используется панелью инспектора для отображения значка возврата. Объект должен реализовать _property_can_revert() для настройки значения по умолчанию. Если _property_can_revert() не реализован, этот метод возвращает false.


Variant property_get_revert(property: StringName) const 🔗

Возвращает пользовательское значение по умолчанию для указанного property. Используйте property_can_revert(), чтобы проверить, имеет ли property пользовательское значение по умолчанию.

Примечание: Этот метод используется панелью инспектора для отображения значка возврата. Объект должен реализовать _property_get_revert() для настройки значения по умолчанию. Если _property_get_revert() не реализован, этот метод возвращает null.


void remove_meta(name: StringName) 🔗

Удаляет указанную запись name из метаданных объекта. См. также has_meta(), get_meta() и set_meta().

Примечание: Имя метаданных должно быть допустимым идентификатором согласно методу StringName.is_valid_identifier().

Примечание: Метаданные, имя которых начинается с подчеркивания (_), считаются доступными только для редактора. Доступные только для редактора метаданные не отображаются в Инспекторе и не должны редактироваться, хотя их все равно можно найти с помощью этого метода.


void remove_user_signal(signal: StringName) 🔗

Удаляет указанный пользовательский сигнал signal из объекта. См. также add_user_signal() и has_user_signal().


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

Назначает value заданному property. Если свойство не существует или тип заданного value не совпадает, ничего не происходит.

var node = Node2D.new()
node.set("global_scale", Vector2(8, 2.5))
print(node.global_scale) # Prints (8.0, 2.5)

Примечание: В C# property должно быть в snake_case при ссылке на встроенные свойства Godot. Предпочитайте использовать имена, представленные в классе PropertyName, чтобы избежать выделения нового StringName при каждом вызове.


void set_block_signals(enable: bool) 🔗

Если установлено значение true, объект становится неспособным испускать сигналы. Таким образом, emit_signal() и сигнальные соединения не будут работать, пока не будет установлено значение false.


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

Назначает value заданному property в конце текущего кадра. Это эквивалентно вызову set() через call_deferred().

var node = Node2D.new()
add_child(node)

node.rotation = 1.5
node.set_deferred("rotation", 3.0)
print(node.rotation) # Prints 1.5

await get_tree().process_frame
print(node.rotation) # Prints 3.0

Примечание: В C# property должно быть в snake_case при ссылке на встроенные свойства Godot. Предпочитайте использовать имена, представленные в классе PropertyName, чтобы избежать выделения нового StringName при каждом вызове.


void set_indexed(property_path: NodePath, value: Variant) 🔗

Назначает новое value свойству, идентифицированному property_path. Путь должен быть NodePath относительно этого объекта и может использовать символ двоеточия (:) для доступа к вложенным свойствам.

var node = Node2D.new()
node.set_indexed("position", Vector2(42, 0))
node.set_indexed("position:y", -10)
print(node.position) # Prints (42.0, -10.0)

Примечание: В C# property_path должен быть в snake_case при ссылке на встроенные свойства Godot. Предпочитайте использовать имена, представленные в классе PropertyName, чтобы избежать выделения нового StringName при каждом вызове.


void set_message_translation(enable: bool) 🔗

Если установлено значение true, позволяет объекту переводить сообщения с помощью tr() и tr_n(). Включено по умолчанию. См. также can_translate_messages().


void set_meta(name: StringName, value: Variant) 🔗

Добавляет или изменяет запись name внутри метаданных объекта. Метаданные value могут быть любым Variant, хотя некоторые типы не могут быть сериализованы правильно.

Если value равно null, запись удаляется. Это эквивалентно использованию remove_meta(). См. также has_meta() и get_meta().

Примечание: Имя метаданных должно быть допустимым идентификатором согласно методу StringName.is_valid_identifier().

Примечание: Метаданные, имя которых начинается с подчеркивания (_), считаются доступными только для редактора. Метаданные, доступные только для редактора, не отображаются в Инспекторе и не должны редактироваться, хотя их все равно можно найти с помощью этого метода.


void set_script(script: Variant) 🔗

Прикрепляет script к объекту и создает его экземпляр. В результате вызывается _init() скрипта. Script используется для расширения функциональности объекта.

Если скрипт уже существует, его экземпляр отсоединяется, а его значения свойств и состояние теряются. Встроенные значения свойств по-прежнему сохраняются.


void set_translation_domain(domain: StringName) 🔗

Устанавливает имя домена перевода, используемого tr() и tr_n(). См. также TranslationServer.


String to_string() 🔗

Возвращает String, представляющую объект. По умолчанию "<ClassName#RID>". Переопределите _to_string(), чтобы настроить строковое представление объекта.


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

Переводит message, используя каталоги перевода, настроенные в настройках проекта. Для помощи с переводом можно указать дополнительный context. Обратите внимание, что большинство узлов Control автоматически переводят свои строки, поэтому этот метод в основном полезен для форматированных строк или нарисованного текста.

Если can_translate_messages() равен false или перевод недоступен, этот метод возвращает message без изменений. См. set_message_translation().

Подробные примеры см. в Интернационализация игр.

Примечание: Этот метод нельзя использовать без экземпляра Object, так как для него требуется метод can_translate_messages(). Чтобы перевести строки в статическом контексте, используйте TranslationServer.translate().


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

Переводит message или plural_message, используя каталоги перевода, настроенные в настройках проекта. Для помощи с переводом можно указать дополнительный context.

Если can_translate_messages() равен false или перевод недоступен, этот метод возвращает message или plural_message без изменений. См. set_message_translation().

n — это номер или количество темы сообщения. Он используется системой перевода для получения правильной формы множественного числа для текущего языка.

Подробные примеры см. в Локализация с использованием gettext.

Примечание: Отрицательные и float числа могут неправильно применяться к некоторым исчисляемым темам. Рекомендуется обрабатывать эти случаи с помощью tr().

Примечание: Этот метод нельзя использовать без экземпляра Object, так как он требует метод can_translate_messages(). Для перевода строк в статическом контексте используйте TranslationServer.translate_plural().