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# ресурсы не будут освобождаться мгновенно после того, как они больше не используются. Вместо этого сборка мусора будет выполняться периодически и освобождать ресурсы, которые больше не используются. Это означает, что неиспользуемые ресурсы будут оставаться в памяти некоторое время, прежде чем будут удалены.
Обучающие материалы
Свойства
|
||
|
||
|
||
Методы
_get_rid() virtual const |
|
void |
_reset_state() virtual |
void |
_set_path_cache(path: String) virtual const |
void |
_setup_local_to_scene() virtual |
duplicate_deep(deep_subresources_mode: DeepDuplicateMode = 1) const |
|
void |
|
generate_scene_unique_id() static |
|
get_id_for_path(path: String) const |
|
get_local_scene() const |
|
get_rid() const |
|
is_built_in() const |
|
void |
|
void |
set_id_for_path(path: String, id: String) |
void |
set_path_cache(path: String) |
void |
|
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
Никакие подресурсы не дублируются. Это полезно даже при глубоком дублировании, чтобы все массивы и словари были дублированы, но при этом указывали на исходные ресурсы.
DeepDuplicateMode DEEP_DUPLICATE_INTERNAL = 1
Будут дублироваться только подресурсы без пути или с локальным путем сцены.
DeepDuplicateMode DEEP_DUPLICATE_ALL = 2
Каждый найденный подресурс будет продублирован, даже если у него нелокальный путь. Другими словами, даже потенциально большие ресурсы, хранящиеся отдельно, будут продублированы.
Описания свойств
bool resource_local_to_scene = false 🔗
Если true, ресурс дублируется для каждого экземпляра всех сцен, использующих его. Во время выполнения ресурс может быть изменен в одной сцене, не влияя на другие экземпляры (см. PackedScene.instantiate()).
Примечание: Изменение этого свойства во время выполнения не влияет на уже созданные дублирующие ресурсы.
Необязательное имя для этого ресурса. Если определено, его значение отображается для представления ресурса в доке Inspector. Для встроенных скриптов имя отображается как часть имени вкладки в редакторе скриптов.
Примечание: Некоторые форматы ресурсов не поддерживают имена ресурсов. Вы по-прежнему можете задать имя в редакторе или через код, но оно будет потеряно при перезагрузке ресурса. Например, только встроенные скрипты могут иметь имя ресурса, в то время как скрипты, хранящиеся в отдельных файлах, не могут.
Уникальный путь к этому ресурсу. Если он был сохранен на диске, значением будет его путь к файлу. Если ресурс содержится исключительно в сцене, значением будет путь к файлу PackedScene, за которым следует уникальный идентификатор.
Примечание: Установка этого свойства вручную может завершиться неудачей, если ресурс с таким же путем уже был загружен ранее. При необходимости используйте take_over_path().
String resource_scene_unique_id 🔗
Уникальный идентификатор относительно сцены этого ресурса. Если оставить его пустым, идентификатор автоматически генерируется при сохранении ресурса в PackedScene. Если ресурс не находится в сцене, это свойство по умолчанию пусто.
Примечание: При сохранении PackedScene, если несколько ресурсов в одной сцене используют один и тот же идентификатор, исходный идентификатор сохраняется только у самого раннего ресурса в иерархии сцены. Остальным ресурсам назначаются новые идентификаторы с помощью generate_scene_unique_id().
Примечание: Установка этого свойства не приводит к генерации сигнала changed.
Предупреждение: При установке идентификатор должен состоять только из букв, цифр и символов подчёркивания. В противном случае произойдет сбой, и по умолчанию будет использован случайно сгенерированный идентификатор.
Описания метода
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)
Resource duplicate(deep: bool = false) const 🔗
Дублирует этот ресурс, возвращая новый ресурс со свойствами export или @GlobalScope.PROPERTY_USAGE_STORAGE, скопированными из исходного.
Если deep равен false, возвращается поверхностная копия: вложенные свойства Array, Dictionary и Resource не дублируются и используются совместно с исходным ресурсом.
Если deep равен true, возвращается глубокая копия: все вложенные массивы, словари и упакованные массивы также дублируются (рекурсивно). Любой найденный внутри Resource будет дублироваться только в том случае, если он локальный, например, DEEP_DUPLICATE_INTERNAL, используемый с duplicate_deep().
Действуют следующие исключения:
Свойства подресурсов с флагом @GlobalScope.PROPERTY_USAGE_ALWAYS_DUPLICATE всегда дублируются (рекурсивно или нет, в зависимости от
deep).Свойства подресурсов с флагом @GlobalScope.PROPERTY_USAGE_NEVER_DUPLICATE никогда не дублируются.
Примечание: Для пользовательских ресурсов этот метод завершится ошибкой, если Object._init() был определён с обязательными параметрами.
Примечание: При дублировании с deep равным true каждый найденный ресурс, включая тот, для которого вызывается этот метод, будет дублироваться только один раз и упоминаться в дубликате столько раз, сколько необходимо. Например, если вы дублируете ресурс A, на который дважды ссылается ресурс B, вы получите новый ресурс A', дважды ссылающийся на новый ресурс B'.
Resource duplicate_deep(deep_subresources_mode: DeepDuplicateMode = 1) const 🔗
Duplicates this resource, deeply, like duplicate() when passing true, with extra control over how subresources are handled.
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 этого ресурса (или пустой RID). Многие ресурсы (такие как Texture2D, Mesh и т. д.) являются высокоуровневыми абстракциями ресурсов, хранящихся на специализированном сервере (DisplayServer, RenderingServer и т. д.), поэтому эта функция вернет исходный RID.
Возвращает 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, потенциально переопределяя существующую запись кэша для этого пути. Дальнейшие попытки загрузить переопределенный ресурс по пути вместо этого вернут этот ресурс.