ResourceSaver
Сохранение ресурсов через зарегистрированные обработчики форматов.
ResourceSaver.Save() сохраняет готовый Resource, не произвольное дерево игры. Формат выбирают ресурс, расширение и зарегистрированные saver. .rdata — текстовый ресурс, .rbin — binary; PackedEntity использует .rscene для уровня и .rprefab для префаба.
Проверяйте Error и возможности выбранного backend. ChangePath имеет подтверждённое ограничение восстановления после ошибки; SetUid() не обновляет runtime-реестр автоматически и не является транзакцией. Сжатый binary ресурс загружайте через ResourceLoader, не как обычный архив.
Собственный ResourceFormatSaver зарегистрируйте один раз и удалите до Dispose. Singleton принадлежит движку. Проверки проводились на Windows в отдельном процессе; редакторные callback, аварийная замена и сохранение UID cache между запусками не проверены.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства1
SingletonСвойство
public static ResourceSaverInstance Singleton { get; }Заимствованный wrapper глобального сервиса движка. Повторное получение использует cached managed wrapper; не создаёт отдельный реестр. Не вызывайте Free()/Dispose() у этого engine-owned объекта. Для обычной работы используйте статические методы класса.
Методы6
AddResourceFormatSavervoid
public static void AddResourceFormatSaver(ResourceFormatSaver formatSaver, bool atFront = false);Добавляет собственный ResourceFormatSaver в глобальный список; atFront=true даёт приоритет перед текущими обработчиками. Реестр удерживает native-ссылку, но регистрацию и managed-срок жизни организуйте явно. Повторная регистрация того же экземпляра разрешена и создаёт дубликат; не добавляйте его перед каждым Save. Метод не возвращает Error; неверный объект/исчерпание лимита дают диагностику. Удалите регистрацию до Dispose собственного saver.
| Имя | Тип | По умолчанию |
|---|---|---|
formatSaver | ResourceFormatSaver | — |
atFront | bool | false |
formatSaverСобственный экземпляр saver; удерживайте его до явного удаления регистрации.
atFrontTrue вставляет первым; false добавляет после существующих обработчиков.
GetRecognizedExtensionsstring[]
public static string[] GetRecognizedExtensions(Resource type);Собирает расширения из зарегистрированных saver для переданного экземпляра Resource; параметр type не является C# typeof/именем класса. Имена без точки, возможны повторы, сортировка не обещается. Список не гарантирует успешный Save: конкретный handler ещё проверяет Recognize/RecognizePath и может отказать. Набор зависит от ресурса и текущей регистрации плагинов.
| Имя | Тип | По умолчанию |
|---|---|---|
type | Resource | — |
typeЭкземпляр Resource, для которого запрашиваются расширения; не объект System.Type.
string[]Новый string[] расширений без точки, с возможными дубликатами.
GetResourceIdForPathlong
public static long GetResourceIdForPath(string path, bool generate = false);Делегирует запрос UID необязательному callback, обычно настроенному редактором. Это не ResourceUid.CreateIdForPath и не общая фабрика UID. Без callback возвращает InvalidId даже при generate=true; это подтверждено в игровом headless-процессе. Не проверяет автоматически весь файл/реестр и не гарантирует запись UID на диск.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
generate | bool | false |
pathПуть, передаваемый callback; не текст uid://.
generateРазрешить callback создать UID, если он поддерживает это; без callback всё равно InvalidId.
longUID callback либо ResourceUid.InvalidId; generate=true не гарантирует новое значение.
RemoveResourceFormatSavervoid
public static void RemoveResourceFormatSaver(ResourceFormatSaver formatSaver);Удаляет первую регистрацию указанного экземпляра. Если он добавлен дважды, один Remove оставляет вторую регистрацию; это проверено. Не уничтожает автоматически ваш managed-wrapper и не удаляет сохранённые файлы. Отсутствующий/null saver даёт диагностику; при обычном lifecycle учитывайте, был ли Add выполнен.
| Имя | Тип | По умолчанию |
|---|---|---|
formatSaver | ResourceFormatSaver | — |
formatSaverТот же экземпляр, который был зарегистрирован; удаляется одна его регистрация.
SaveError
public static Error Save(Resource resource, string path = "", ResourceSaver.SaverFlags flags = ResourceSaver.SaverFlags.None);Сохраняет Resource через зарегистрированные format savers: сначала проверяется объект и путь, затем вызывается обработчик. Пустой path использует ResourcePath; если оба пусты, операция недопустима. После ошибки возможен переход к следующему обработчику, а Ok означает его ответ, не независимую проверку файла. Флаги реализуются конкретным saver. В 1.0.0 ChangePath меняет ResourcePath перед вызовом, но восстанавливает старое значение только при успехе: неудача может оставить новый путь, в том числе после успешного fallback. Это воспроизведено. Не является атомарным сохранением игры; живую Entity сначала нужно упаковать отдельно, Save принимает Resource.
| Имя | Тип | По умолчанию |
|---|---|---|
resource | Resource | — |
path | string | "" |
flags | ResourceSaver.SaverFlags | ResourceSaver.SaverFlags.None |
resourceГотовый живой Resource для выбранного формата; не Entity дерева игры.
pathПуть назначения с подходящим расширением; пустой использует текущий ResourcePath. Родители и доступность проверяются отдельно.
flagsSaverFlags для backend; Compress/SaveBigEndian относятся к binary saver. ChangePath имеет описанное ограничение восстановления при ошибке.
ErrorError последнего подходящего обработчика; Ok не является независимым подтверждением записи/атомарности.
SetUidError
public static Error SetUid(string resource, long uid);Просит format saver изменить UID существующего ресурсного файла, не создаёт игровую Entity и не регистрирует путь в ResourceUid автоматически. Проверяйте Error. Текстовый backend 1.0.0 использует временный .uidren и remove/rename, не передавая наружу их ошибки; это source-only ограничение, не транзакционная гарантия. На Windows проверено изменение заголовка обычного .rdata; ошибки замены и редакторное сканирование не выполнялись.
| Имя | Тип | По умолчанию |
|---|---|---|
resource | string | — |
uid | long | — |
resourceПуть уже записанного ресурсного файла; это string, не объект Resource.
uidUID ресурса; при самостоятельном управлении заранее проверьте допустимость и конфликт регистрации.
ErrorError обработчика; для текстовой замены не означает проверки всех завершающих файловых операций.
ResourceSaver.SaverFlags
| Значение | Описание |
|---|---|
BundleResources = 2 | Пакеты внешних ресурсов. |
ChangePath = 4 | Изменяет |
Compress = 32 | Сжимать ресурс при сохранении с помощью |
None = 0 | Нет возможности экономии ресурсов. |
OmitEditorProperties = 8 | Не сохраняйте метаданные, специфичные для редактора (идентифицируемые префиксом |
RelativePaths = 1 | Сохраните ресурс с путем относительно сцены, которая его использует. |
ReplaceSubresourcePaths = 64 | Перенять пути сохраненных подресурсов (см. |
SaveBigEndian = 16 | Сохранить как Большой эндиан (см. |