Resource
Общие данные, копирование графа ресурсов и уведомления об изменениях.
Resource хранит данные, которые могут разделять несколько объектов. Новая C#-переменная не создаёт независимую копию. Duplicate() оставляет вложенные ссылки общими; Duplicate(true) копирует встроенные ресурсы; DuplicateDeep(All) включает внешние, с исключениями для скриптов и usage-флагов.
ResourcePath управляет общей записью кэша, но не сохраняет файл. TakeOverPath() заменяет владельца пути, а SetPathCache() — служебная операция без регистрации. Изменения сохраняйте отдельно через ResourceSaver. Не Dispose общий cached wrapper, пока другие ссылки продолжают его использовать.
Для собственного C#-свойства вызывайте EmitChanged() после изменения: один [Export] не отправляет сигнал автоматически. ResourceLocalToScene относится к обработке уровня/префаба, а не к копии на каждую Entity.
Работа с ресурсами, собственный формат. Windows headless-проверки покрывают граф копирования, пути и callbacks. Редакторный ID-кэш, реальное локальное инстанцирование PackedEntity и GPU RID здесь не выполнялись.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
ResourceКонструктор
public Resource();Создаёт собственный Resource без пути и имени. Не загружает файл, не регистрирует формат и не добавляет Entity в дерево. Ресурсы могут быть общими: для независимых данных выбирайте нужный режим Duplicate, а не ещё одну переменную с той же ссылкой.
Свойства4
ResourceLocalToSceneСвойство
public bool ResourceLocalToScene { get; set; }Флаг отдельного ресурса для экземпляра уровня/префаба при обработке PackedEntity. Задавайте до инстанцирования; изменение флага не отделяет уже разделяемые ссылки задним числом. Это не уникальность на каждую Entity и не сетевой ID. Механика реального PackedEntity здесь сверена по исходникам; отдельно проверено, что один флаг не назначает GetLocalScene.
ResourceNameСвойство
public string ResourceName { get; set; }Имя для отображения. Изменение вызывает Changed, даже при повторной записи того же значения; не переименовывает файл и не меняет ResourcePath.
ResourcePathСвойство
public string ResourcePath { get; set; }Путь и ключ общего ресурсного кэша, не команда сохранения файла. Setter регистрирует непустой путь; пустой снимает регистрацию. При занятом пути используйте осознанный TakeOverPath либо другой путь. В текущем native-коде отказ из-за занятого пути происходит после удаления прежней регистрации и очистки пути этого объекта: операция не обещает откат. Этот конфликт разобран по исходникам, без выполнения ошибочного сценария.
ResourceSceneUniqueIdСвойство
public string ResourceSceneUniqueId { get; set; }Локальный ID подресурса при сериализации. Допустимы ASCII-буквы, цифры, подчёркивание и пустая строка. Недопустимый символ вызывает native-диагностику и замену ID сгенерированным кандидатом; это не сохранение старого значения. Не путайте с uid:// и уникальностью на весь проект.
Методы26
CopyFromResourceError
public Error CopyFromResource(Resource resource);Копирует STORAGE-свойства в существующий объект, сохраняя его ResourcePath. Сначала вызывает ResetState; вложенные Resource остаются общими, это не глубокая копия. Проверяет совпадение native engine-класса, не строгое равенство C# типов. Несовпадение даёт InvalidParameter; null также недопустим. Сигналы Changed во время копирования объединяются в один отложенный, если было уведомление; возврат Ok не обещает независимость данных или запись файла.
| Имя | Тип | По умолчанию |
|---|---|---|
resource | Resource | — |
resourceНенулевой источник с тем же native engine-классом; не обязательно независимые вложенные данные.
ErrorOk при принятом копировании либо InvalidParameter для недопустимого источника/класса; не признак глубокой независимости.
DuplicateResource
public Resource Duplicate(bool deep = false);Создаёт новый корневой Resource и копирует сохраняемые свойства/скрипт, но не ResourcePath. По умолчанию контейнеры и вложенные ресурсы общие. deep=true копирует контейнеры и встроенные вложенные Resource; ресурсы с внешним путём обычно сохраняются общими. Повторные ссылки на один копируемый ресурс переназначаются к одной копии. Флаги использования свойств могут переопределить правило. Для всех внешних ресурсов используйте DuplicateDeep(All); пользовательские конструкторы/скрипты могут ограничить копирование.
| Имя | Тип | По умолчанию |
|---|---|---|
deep | bool | false |
deepFalse разделяет контейнеры/вложенные ссылки; true рекурсивно копирует контейнеры и встроенные Resource с учётом usage-флагов.
ResourceНовый Resource с правилами выбранной глубины; при невозможности создания возможен null и диагностика.
DuplicateDeepResource
public Resource DuplicateDeep(Resource.DeepDuplicateMode deepSubresourcesMode = Resource.DeepDuplicateMode.Internal);Создаёт новый корень и рекурсивно копирует Array/Dictionary. None сохраняет вложенные Resource общими; Internal копирует встроенные; All включает внешние Resource. All не является обещанием полной независимости: скрипты и свойства с NEVER_DUPLICATE могут остаться общими. Сохраняет повторные ссылки внутри копируемого графа через remap, а не создаёт отдельную копию на каждое вхождение. Исходные пути Resource не переносятся на копии; операция ничего не сохраняет на диск.
| Имя | Тип | По умолчанию |
|---|---|---|
deepSubresourcesMode | Resource.DeepDuplicateMode | Resource.DeepDuplicateMode.Internal |
deepSubresourcesModeNone, Internal или All: политика вложенных Resource, а не отключение копирования корня/контейнеров.
ResourceНовый корень с выбранной политикой вложенных ресурсов; невалидный режим/невозможность создания могут дать null.
EmitChangedvoid
public void EmitChanged();Уведомляет подписчиков Changed после изменения данных. Не записывает файл и не гарантирует обновление всех редакторных представлений. В custom C# setter вызовите после фактического изменения; не вызывайте бесконечно из собственного Changed handler. Во время фоновой загрузки native backend может перенести уведомление на главный поток.
GenerateSceneUniqueIdstring
public static string GenerateSceneUniqueId();Создаёт короткий пятисимвольный кандидат внутреннего ID. Не глобальный UID, не криптографический идентификатор и не резервирование уникальности. Формат текущей реализации использует a–y и 0–8; не стройте на нём постоянный публичный протокол. Совпадения разрешаются вызывающей системой сохранения.
stringКороткий кандидат локального ID, не глобально зарезервированный UID.
GetIdForPathstring
public string GetIdForPath(string path);Читает редакторный кэш ID для пары: путь ссылающегося файла и текущий ResourcePath этого ресурса. Не ResourceUid и не чтение ID из произвольного файла. Без записи или в сборке без TOOLS_ENABLED возвращает пустую строку. Редакторная персистентность здесь проверена только по исходникам.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть ссылающегося файла для редакторного кэша ID; не новый путь ресурса.
stringКэшированный ID пары путей либо пустая строка.
GetLocalSceneEntity
public Entity GetLocalScene();Возвращает корень Entity, назначенный механикой local-to-scene, либо доступный editor-контекст, либо null. Одна установка ResourceLocalToScene=true не создаёт и не назначает корень. Возвращённая Entity заимствована: не Free её как собственный временный объект. Реальное PackedEntity-инстанцирование в этом проходе не выполнялось.
EntityЗаимствованная корневая Entity либо null.
GetNamestring
public string GetName();Возвращает ResourceName — имя для отображения, не путь файла или ключ глобального реестра.
stringТекущее имя отображения, возможно пустое.
GetPathstring
public string GetPath();Возвращает текущую строку ResourcePath. Может быть пустой, внутренней или заданной через SetPathCache без регистрации. Непустой путь не доказывает существующий файл, загрузку или запись на диск.
stringТекущая строка пути без гарантии существования файла.
GetRidRid
public Rid GetRid();Возвращает RID backend-ресурса, если конкретный тип его предоставляет. Базовый Resource возвращает пустой RID; это не InstanceId. Не освобождайте возвращённый RID вручную, если его владельцем остаётся Resource. IsValid проверяет ненулевое значение, не общую пригодность для любого server API.
RidRID конкретного backend-ресурса либо пустой RID; не новый объект во владение.
GetSceneUniqueIdstring
public string GetSceneUniqueId();Возвращает ResourceSceneUniqueId: локальный ID сериализуемого подресурса, не глобальный ResourceUid. Пустая строка допустима.
stringЛокальный ID сериализуемого подресурса, возможно пустой.
IsBuiltInbool
public bool IsBuiltIn();Классифицирует ресурс по пути: пустой, содержащий :: или начинающийся с local:// считается встроенным. Это правило используется при глубоком копировании; оно не проверяет наличие файла, сохранение или принадлежность Entity.
boolTrue по встроенной классификации строки пути.
IsLocalToScenebool
public bool IsLocalToScene();Возвращает флаг ResourceLocalToScene. True не доказывает, что экземпляр уже скопирован или связан с конкретным корнем Entity.
boolТекущее значение local-to-scene флага.
ResetStatevoid
public void ResetState();Вызывает _ResetState для состояния, которое конкретный класс должен сбросить сам. Базовая реализация не обнуляет автоматически все экспортируемые свойства, имя и путь. CopyFromResource вызывает этот hook перед копированием.
SetIdForPathvoid
public void SetIdForPath(string path, string id);Записывает редакторный ID-кэш для пути ссылающегося файла и текущего ResourcePath. Пустой id удаляет запись. Не назначает ResourceUid, не сохраняет файл и не регистрирует новый ресурсный путь. Без TOOLS_ENABLED операция не делает ничего; editor workflow здесь не выполнялся.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
id | string | — |
pathПуть ссылающегося файла для редакторного кэша ID; не новый путь ресурса.
idID редакторного кэша; пустое удаляет запись.
SetLocalToScenevoid
public void SetLocalToScene(bool enable);Задаёт ResourceLocalToScene. Не создаёт немедленную копию, не меняет существующие ссылки и не назначает корень GetLocalScene.
| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
enableФлаг будущей обработки local-to-scene, не немедленная команда копирования.
SetNamevoid
public void SetName(string name);Задаёт ResourceName и вызывает Changed, включая повтор того же значения. Не выполняет файловое переименование.
| Имя | Тип | По умолчанию |
|---|---|---|
name | string | — |
nameИмя отображения; пустое разрешено, не файловый путь.
SetPathvoid
public void SetPath(string path);Задаёт ResourcePath с обычной регистрацией кэша. Не записывает и не перемещает файл. Занятый другим ресурсом путь даёт native-диагностику; прежний путь этого объекта к тому моменту уже очищен в текущей реализации. Для намеренной замены владельца есть TakeOverPath; для служебного raw-пути — SetPathCache, с другой семантикой.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathСтрока нового пути; не команда записи/перемещения файла. SetPathCache обходит регистрацию, SetPath/TakeOverPath меняют её.
SetPathCachevoid
public void SetPathCache(string path);Служебно меняет строку пути и вызывает _SetPathCache, обходя регистрацию ResourceCache. Не эквивалент ResourcePath/SetPath. Не используйте для обычного перемещения уже закэшированного объекта: согласованность записей кэша не поддерживается этой операцией. Проверено на незарегистрированном QA-объекте.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathСтрока нового пути; не команда записи/перемещения файла. SetPathCache обходит регистрацию, SetPath/TakeOverPath меняют её.
SetSceneUniqueIdvoid
public void SetSceneUniqueId(string id);Задаёт локальный ResourceSceneUniqueId. ASCII-буквы, цифры и подчёркивание допустимы; пустое значение принято. При недопустимом символе native-код ставит сгенерированный ID и выдаёт диагностику. Не записывает файл и не резервирует глобальную уникальность.
| Имя | Тип | По умолчанию |
|---|---|---|
id | string | — |
idЛокальный ID из ASCII-букв, цифр и подчёркивания; пустое разрешено.
SetupLocalToScenevoid · Устарело
public void SetupLocalToScene();В SDK помечен устаревшим: внутренний вызов. Выдаёт SetupLocalToSceneRequested, затем вызывает _SetupLocalToScene. Сам по себе не копирует ресурс и не включает local-to-scene. В обычном пользовательском классе переопределяйте _SetupLocalToScene вместо ручного вызова; внутренний dispatch проверен только специальным QA-сценарием.
TakeOverPathvoid
public void TakeOverPath(string path);Присваивает ресурсный путь с заменой владельца кэша. Прежний владелец остаётся жив по существующим ссылкам, но его ResourcePath очищается. Последующий lookup пути указывает на этот ресурс. Файлы не перемещаются и не сохраняются; используйте только при намеренной замене общего объекта.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathСтрока нового пути; не команда записи/перемещения файла. SetPathCache обходит регистрацию, SetPath/TakeOverPath меняют её.
_GetRidRid
public virtual Rid _GetRid();Hook для GetRid конкретного ресурса. Верните RID реально принадлежащего backend-объекта либо пустой RID. Сам факт возврата не создаёт объект сервера и не передаёт владение вызывающему коду; не подменяйте InstanceId значением RID.
RidRID своего backend-объекта либо пустое значение.
_ResetStatevoid
public virtual void _ResetState();Переопределите для очистки собственного несохраняемого/динамического состояния. Вызывается ResetState, в том числе перед CopyFromResource. Не вызывайте из hook сам ResetState рекурсивно; автоматического сброса всех свойств нет.
_SetPathCachevoid
public virtual void _SetPathCache(string path);Уведомление после служебного SetPathCache. Путь уже записан; hook не заменяет регистрацию ResourcePath и не подтверждает файловую операцию. Не вызывайте SetPathCache рекурсивно из этого callback.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathСтрока нового пути; не команда записи/перемещения файла. SetPathCache обходит регистрацию, SetPath/TakeOverPath меняют её.
_SetupLocalToScenevoid
public virtual void _SetupLocalToScene();Переопределите для настройки ресурса в механике local-to-scene. GetLocalScene может дать назначенный корень, но проверяйте null вне нормального инстанцирования. Hook не является конструктором каждой Entity или _Ready. Самостоятельный callback-dispatch проверен; реальное локальное копирование PackedEntity в этом проходе не выполнялось.
Сигналы и события2
ChangedСобытие
public event Action Changed;Событие уведомления об изменении, не автоматическое сохранение на диск. ResourceName вызывает его даже при повторе значения. Обычный setter собственного [Export]-свойства C# не вызывает событие автоматически: вызовите EmitChanged после значимого изменения. При общей ссылке подписчики наблюдают тот же объект.
SetupLocalToSceneRequestedСобытие · Устарело
public event Action SetupLocalToSceneRequested;В SDK помечено устаревшим: вместо подписки для настройки ресурса переопределяйте _SetupLocalToScene. Native setup выдаёт событие перед callback; само событие не является доказательством копирования или наличия корня уровня.
Resource.DeepDuplicateMode
| Значение | Описание |
|---|---|
All = 2 | Каждый найденный подресурс будет продублирован, даже если у него нелокальный путь. Другими словами, даже потенциально большие ресурсы, хранящиеся отдельно, будут продублированы. |
Internal = 1 | Будут дублироваться только подресурсы без пути или с локальным путем сцены. |
None = 0 | Вложенные ресурсы вообще не дублируются. Это полезно даже при глубоком дублировании, поскольку позволяет сохранить дублирование всех массивов и словарей, но при этом сохранить ссылки на исходные ресурсы. |