Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Resource

Наследует: RefCounted < Object

Наследуется от: Animation, AnimationLibrary, AnimationNode, AnimationNodeStateMachinePlayback, AnimationNodeStateMachineTransition, AudioBusLayout, AudioEffect, AudioStream, BitMap, BoneMap, ButtonGroup, CameraAttributes, ColorPalette, Compositor, CompositorEffect, CryptoKey, Curve, Curve2D, Curve3D, EditorNode3DGizmoPlugin, EditorSettings, Environment, FoldableGroup, Font, GDExtension, GLTFAccessor, GLTFAnimation, GLTFBufferView, GLTFCamera, GLTFDocument, GLTFDocumentExtension, GLTFLight, GLTFMesh, GLTFNode, GLTFPhysicsBody, GLTFPhysicsShape, GLTFSkeleton, GLTFSkin, GLTFSpecGloss, GLTFState, GLTFTexture, GLTFTextureSampler, Gradient, Image, ImporterMesh, InputEvent, JointLimitation3D, JSON, LabelSettings, LightmapGIData, Material, Mesh, MeshLibrary, MissingResource, MultiMesh, NavigationMesh, NavigationMeshSourceGeometryData2D, NavigationMeshSourceGeometryData3D, NavigationPolygon, Noise, Occluder3D, OccluderPolygon2D, OggPacketSequence, OpenXRAction, OpenXRActionMap, OpenXRActionSet, OpenXRBindingModifier, OpenXRHapticBase, OpenXRInteractionProfile, OpenXRIPBinding, PackedDataContainer, PackedScene, PhysicsMaterial, PolygonPathFinder, RDShaderFile, RDShaderSPIRV, RichTextEffect, SceneReplicationConfig, Script, Shader, ShaderInclude, Shape2D, Shape3D, Shortcut, SkeletonModification2D, SkeletonModificationStack2D, SkeletonProfile, Skin, Sky, SpriteFrames, StyleBox, SyntaxHighlighter, Texture, Theme, TileMapPattern, TileSet, TileSetSource, Translation, VideoStream, VideoStreamPlayback, VisualShaderNode, VoxelGIData, World2D, World3D, X509Certificate

Базовый класс для сериализуемых объектов.

Описание

Resource — это базовый класс для всех типов ресурсов, специфичных для Godot, в первую очередь выступающий в качестве контейнеров данных. Поскольку они наследуются от RefCounted, ресурсы подсчитываются по ссылкам и освобождаются, когда больше не используются. Их также можно вкладывать в другие ресурсы и сохранять на диске. PackedScene, один из самых распространенных Object-ов в проекте Godot, также является ресурсом, уникальным образом способным хранить и создавать экземпляры Node, которые он содержит столько раз, сколько необходимо.

В GDScript ресурсы могут загружаться с диска с помощью их resource_path с помощью @GDScript.load() или @GDScript.preload().

Движок хранит глобальный кэш всех загруженных ресурсов, на которые ссылаются пути (см. ResourceLoader.has_cached()). Ресурс будет кэшироваться при первой загрузке и удаляться из кэша после освобождения всех ссылок. Когда ресурс кэшируется, последующие загрузки с использованием его пути будут возвращать кэшированную ссылку.

Примечание: В C# ресурсы не будут освобождаться мгновенно после того, как они больше не используются. Вместо этого сборка мусора будет выполняться периодически и освобождать ресурсы, которые больше не используются. Это означает, что неиспользуемые ресурсы будут оставаться в памяти некоторое время, прежде чем будут удалены.

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

Свойства

bool

resource_local_to_scene

false

String

resource_name

""

String

resource_path

""

String

resource_scene_unique_id

Методы

RID

_get_rid() virtual const

void

_reset_state() virtual

void

_set_path_cache(path: String) virtual const

void

_setup_local_to_scene() virtual

Error

copy_from_resource(resource: Resource)

Resource

duplicate(deep: bool = false) const

Resource

duplicate_deep(deep_subresources_mode: DeepDuplicateMode = 1) const

void

emit_changed()

String

generate_scene_unique_id() static

String

get_id_for_path(path: String) const

Node

get_local_scene() const

RID

get_rid() const

bool

is_built_in() const

void

reset_state()

void

set_id_for_path(path: String, id: String)

void

set_path_cache(path: String)

void

setup_local_to_scene()

void

take_over_path(path: String)


Сигналы

changed() 🔗

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

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


setup_local_to_scene_requested() 🔗

Устарело: This signal is only emitted when the resource is created. Override _setup_local_to_scene() instead.

Создано новым дублированным ресурсом, у которого resource_local_to_scene установлено значение true.


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

enum DeepDuplicateMode: 🔗

DeepDuplicateMode DEEP_DUPLICATE_NONE = 0

No subresources at all are duplicated. This is useful even in a deep duplication to have all the arrays and dictionaries duplicated but still pointing to the original resources.

DeepDuplicateMode DEEP_DUPLICATE_INTERNAL = 1

Будут дублироваться только подресурсы без пути или с локальным путем сцены.

DeepDuplicateMode DEEP_DUPLICATE_ALL = 2

Каждый найденный подресурс будет продублирован, даже если у него нелокальный путь. Другими словами, даже потенциально большие ресурсы, хранящиеся отдельно, будут продублированы.


Описания свойств

bool resource_local_to_scene = false 🔗

  • void set_local_to_scene(value: bool)

  • bool is_local_to_scene()

Если true, ресурс дублируется для каждого экземпляра всех сцен, использующих его. Во время выполнения ресурс может быть изменен в одной сцене, не влияя на другие экземпляры (см. PackedScene.instantiate()).

Примечание: Изменение этого свойства во время выполнения не влияет на уже созданные дублирующие ресурсы.


String resource_name = "" 🔗

Необязательное имя для этого ресурса. Если определено, его значение отображается для представления ресурса в доке Inspector. Для встроенных скриптов имя отображается как часть имени вкладки в редакторе скриптов.

Примечание: Некоторые форматы ресурсов не поддерживают имена ресурсов. Вы по-прежнему можете задать имя в редакторе или через код, но оно будет потеряно при перезагрузке ресурса. Например, только встроенные скрипты могут иметь имя ресурса, в то время как скрипты, хранящиеся в отдельных файлах, не могут.


String resource_path = "" 🔗

Уникальный путь к этому ресурсу. Если он был сохранен на диске, значением будет его путь к файлу. Если ресурс содержится исключительно в сцене, значением будет путь к файлу PackedScene, за которым следует уникальный идентификатор.

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


String resource_scene_unique_id 🔗

  • void set_scene_unique_id(value: String)

  • String get_scene_unique_id()

A unique identifier relative to this resource's scene. If left empty, the ID is automatically generated when this resource is saved inside a PackedScene. If the resource is not inside a scene, this property is empty by default.

Note: When the PackedScene is saved, if multiple resources in the same scene use the same ID, only the earliest resource in the scene hierarchy keeps the original ID. The other resources are assigned new IDs from generate_scene_unique_id().

Note: Setting this property does not emit the changed signal.

Warning: When setting, the ID must only consist of letters, numbers, and underscores. Otherwise, it will fail and default to a randomly generated ID.


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

RID _get_rid() virtual const 🔗

Переопределите этот метод, чтобы возвращать пользовательский RID при вызове get_rid().


void _reset_state() virtual 🔗

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


void _set_path_cache(path: String) virtual const 🔗

Переопределите этот метод для выполнения дополнительной логики после вызова set_path_cache() для этого объекта.


void _setup_local_to_scene() virtual 🔗

Переопределите этот метод, чтобы настроить новый дублированный ресурс, созданный из PackedScene.instantiate(), если resource_local_to_scene оригинала установлен в true.

Пример: Установите случайное значение damage для каждого локального ресурса из инстанцированной сцены:

extends Resource

var damage = 0

func _setup_local_to_scene():
    damage = randi_range(10, 40)

Error copy_from_resource(resource: Resource) 🔗

Copies the data from resource into this resource. Both resources must share the same class.


Resource duplicate(deep: bool = false) const 🔗

Дублирует этот ресурс, возвращая новый ресурс со свойствами export или @GlobalScope.PROPERTY_USAGE_STORAGE, скопированными из исходного.

Если deep равен false, возвращается поверхностная копия: вложенные свойства Array, Dictionary и Resource не дублируются и используются совместно с исходным ресурсом.

Если deep равен true, возвращается глубокая копия: все вложенные массивы, словари и упакованные массивы также дублируются (рекурсивно). Любой найденный внутри Resource будет дублироваться только в том случае, если он локальный, например, DEEP_DUPLICATE_INTERNAL, используемый с duplicate_deep().

Действуют следующие исключения:

Примечание: Для пользовательских ресурсов этот метод завершится ошибкой, если Object._init() был определён с обязательными параметрами.

Примечание: При дублировании с deep равным true каждый найденный ресурс, включая тот, для которого вызывается этот метод, будет дублироваться только один раз и упоминаться в дубликате столько раз, сколько необходимо. Например, если вы дублируете ресурс A, на который дважды ссылается ресурс B, вы получите новый ресурс A', дважды ссылающийся на новый ресурс B'.


Resource duplicate_deep(deep_subresources_mode: DeepDuplicateMode = 1) const 🔗

Создает глубокую копию этого ресурса, подобно duplicate(), при передаче параметра true, с дополнительным контролем над обработкой подресурсов.


void emit_changed() 🔗

Выдает сигнал changed. Этот метод вызывается автоматически для некоторых встроенных ресурсов.

Примечание: Для пользовательских ресурсов рекомендуется вызывать этот метод всякий раз, когда происходит значимое изменение, например, измененное свойство. Это гарантирует, что пользовательские Object, зависящие от ресурса, будут правильно обновлены.

var damage:
    set(new_value):
        if damage != new_value:
            damage = new_value
            emit_changed()

String generate_scene_unique_id() static 🔗

Генерирует уникальный идентификатор для ресурса, который будет содержаться внутри PackedScene, на основе текущей даты, времени и случайного значения. Возвращаемая строка состоит только из букв (a to y) и цифр (0 to 8). См. также resource_scene_unique_id.


String get_id_for_path(path: String) const 🔗

Из внутреннего кэша уникальных идентификаторов сцены возвращает идентификатор данного ресурса для сцены по адресу path. Если запись отсутствует, возвращается пустая строка. Полезно для сохранения уникальных идентификаторов сцены при реализации пользовательского формата ресурсов, совместимого с VCS, путём расширения ResourceFormatLoader и ResourceFormatSaver.

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


Node get_local_scene() const 🔗

Если resource_local_to_scene установлен в true и ресурс был загружен из экземпляра PackedScene, возвращает корень Node сцены, где этот ресурс используется. В противном случае возвращает null.


RID get_rid() const 🔗

Возвращает RID этого ресурса (или пустой RID). Многие ресурсы (такие как Texture2D, Mesh и т. д.) являются высокоуровневыми абстракциями ресурсов, хранящихся на специализированном сервере (DisplayServer, RenderingServer и т. д.), поэтому эта функция вернет исходный RID.


bool is_built_in() const 🔗

Возвращает true, если ресурс сохранен на диске как часть файла другого ресурса.


void reset_state() 🔗

Позволяет очистить ресурс от своих неэкспортируемых свойств. См. также _reset_state(). Полезно при реализации пользовательского формата ресурсов путем расширения ResourceFormatLoader и ResourceFormatSaver.


void set_id_for_path(path: String, id: String) 🔗

Во внутреннем кэше для уникальных идентификаторов сцены устанавливает идентификатор этого ресурса на id для сцены по адресу path. Если id пуст, запись кэша для path очищается. Полезно для сохранения уникальных идентификаторов сцены при реализации удобного для VCS пользовательского формата ресурсов путем расширения ResourceFormatLoader и ResourceFormatSaver.

Примечание: Этот метод реализуется только при запуске в контексте редактора.


void set_path_cache(path: String) 🔗

Устанавливает путь к ресурсу на path без использования кэша ресурсов. Полезно для обработки значений CacheMode при реализации пользовательского формата ресурсов путем расширения ResourceFormatLoader и ResourceFormatSaver.


void setup_local_to_scene() 🔗

Устарело: This method should only be called internally.

Вызывает _setup_local_to_scene(). Если resource_local_to_scene установлен в true, этот метод автоматически вызывается из PackedScene.instantiate() новым дублированным ресурсом в экземпляре сцены.


void take_over_path(path: String) 🔗

Устанавливает resource_path в path, потенциально переопределяя существующую запись кэша для этого пути. Дальнейшие попытки загрузить переопределенный ресурс по пути вместо этого вернут этот ресурс.