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, 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

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

Жодні підресурси не дублюються. Це корисно навіть при глибокому дублюванні, щоб усі масиви та словники були продубльовані, але все ще вказували на оригінальні ресурси.

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, ресурс дублюється для кожного екземпляра всіх сцен, використовуючи його. На run-time ресурс може бути змінений в одному місці без впливу інших екземплярів (див. PackedScene.instantiate()).

Примітка: Зміна цього майна на run-time не впливає на вже створених дублікатів ресурсів.


String resource_name = "" 🔗

Додаткове найменування цього ресурсу. При визначенні його значення відображаються для відображення ресурсу в Інспекції. Для вбудованих сценаріїв ім'я відображається як частина назви вкладки в редакторі скриптів.

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


String resource_path = "" 🔗

Унікальний шлях до цього ресурсу. Якщо він був збережений на диск, значення буде його файлопатією. Якщо ресурс знаходиться виключно в межах сцени, значення буде файлова система PackedScene, а також унікальний ідентифікатор.

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


String resource_scene_unique_id 🔗

  • void set_scene_unique_id(value: String)

  • String get_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.

Приклад: Встановіть випадкове значення шкоди для кожного локального ресурсу зі створеної сцени:

розширює ресурс

var damage = 0

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

Resource duplicate(deep: bool = false) const 🔗

Дублює цей ресурс, повертаючи новий ресурс з його властивостями exported або @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), з додатковим контролем над обробкою підресурсів.

deep_subresources_mode має бути одним із значень з DeepDuplicateMode.


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 до y) і чисел (0 до 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(). Якщо ресурс_local_to_scene встановлюється на true, цей метод автоматично називається PackedScene.instantiate() новим дублікованим ресурсом в екземплярі сцени.


void take_over_path(path: String) 🔗

Налаштовує наявний запис кешу для цього шляху. Подальші спроби навантажити перевантажений ресурс шляхом повернення цього ресурсу.