ResourceFormatLoader
Обработчик чтения собственного формата ресурсов.
Реализуйте подкласс C# с _GetRecognizedExtensions, _HandlesType, _GetResourceType и _Load. Зарегистрируйте экземпляр через ResourceLoader.AddResourceFormatLoader до первого Load и снимите регистрацию до Dispose. Конструктор сам обработчик не регистрирует.
Методы с подчёркиванием — callbacks движка. Описанные стандартные проверки относятся к нативному вызову при отсутствии переопределения. Для обычного чтения используйте ResourceLoader.Load, а не прямой вызов callback.
_Load возвращает Resource либо целочисленный Error внутри Variant. Проверка пути выбирает обработчик, но не проверяет данные. Зависимости, UID, потокобезопасность и режимы кеша требуют отдельного решения, если формат их использует.
собственный формат ресурсов: полный исполняемый пример C#.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
ResourceFormatLoaderКонструктор
public ResourceFormatLoader();Создаёт незарегистрированный обработчик. Реализуйте подкласс с callbacks и добавьте экземпляр в ResourceLoader до первого чтения.
Методы11
_Existsbool
public virtual bool _Exists(string path);Проверяет существование ресурса. Без переопределения нативный обработчик использует FileAccess. Наличие файла не означает, что его содержимое корректно или последующее чтение успешно.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть файла собственного формата: логический asset:// или user:// согласно месту хранения.
booltrue, если обработчик считает ресурс существующим; это не гарантия корректного чтения.
_GetClassesUsedstring[]
public virtual string[] _GetClassesUsed(string path);Сообщает имена классов, используемых содержимым файла. Без переопределения нативный обработчик добавляет непустой результат определения базового типа ресурса. Не возвращайте экземпляры объектов.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть файла собственного формата: логический asset:// или user:// согласно месту хранения.
string[]Массив строковых имён классов; пустой массив, если классы не перечисляются.
_GetDependenciesstring[]
public virtual string[] _GetDependencies(string path, bool addTypes);Перечисляет внешние ссылки файла. Каждая запись имеет вид путь либо uid::тип::резервный_путь; секция типа пустая при addTypes=false. Концевые пустые секции опускаются. Перечисление само не загружает зависимости и не переписывает файл.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
addTypes | bool | — |
pathПуть файла собственного формата: логический asset:// или user:// согласно месту хранения.
addTypestrue добавляет имя базового типа после первого ::. Для скриптового ресурса без отдельного нативного типа подходит Resource.
string[]Массив записей зависимостей. Без типа, но с UID и резервным путём: uid://...::::asset://data/item.rdata.
_GetRecognizedExtensionsstring[]
public virtual string[] _GetRecognizedExtensions();Перечисляет расширения файлов, которые читает обработчик, например rfnote без точки. Это сведения для выбора загрузчика, а не проверка содержимого каждого файла.
string[]Массив расширений без точки; пустой массив не предоставляет расширений для стандартного выбора.
_GetResourceScriptClassstring
public virtual string _GetResourceScriptClass(string path);Сообщает имя именованного скриптового класса ресурса отдельно от его встроенного базового типа. Метод не регистрирует класс и не создаёт объект.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть файла собственного формата: логический asset:// или user:// согласно месту хранения.
stringИмя именованного скриптового класса либо пустая строка, если такого имени нет или формат его не сообщает.
_GetResourceTypestring
public virtual string _GetResourceType(string path);Определяет встроенный тип ресурса для пути. Для поддерживаемого собственного C# ресурса можно вернуть Resource. Название C# класса само по себе не становится нативным типом ClassDB.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть файла собственного формата: логический asset:// или user:// согласно месту хранения.
stringИмя поддерживаемого встроенного типа или пустая строка, если путь не распознан.
_GetResourceUidlong
public virtual long _GetResourceUid(string path);Читает устойчивый UID из собственного формата. Сам факт переопределения включает собственную поддержку UID: не добавляйте заглушку -1, если нужен стандартный .uid. Без переопределения нативный обработчик читает соседний файл path + .uid; создание этого файла относится к редакторскому процессу, не к данному чтению.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть файла собственного формата: логический asset:// или user:// согласно месту хранения.
longЧисловой UID либо -1, если корректный идентификатор отсутствует. Это не путь файла.
_HandlesTypebool
public virtual bool _HandlesType(StringName type);Сообщает поддержку базового типа. Стандартная нативная проверка пути использует этот callback при непустой подсказке типа. Без переопределения поддержка типа не заявляется.
| Имя | Тип | По умолчанию |
|---|---|---|
type | StringName | — |
typeПодсказка встроенного типа, например Resource. Явно обработайте все поддерживаемые типы.
booltrue для поддерживаемого типа; false позволяет пропустить обработчик при соответствующей подсказке.
_LoadVariant
public virtual Variant _Load(string path, string originalPath, bool useSubThreads, int cacheMode);Читает и проверяет файл после выбора обработчика. При успехе верните Resource внутри Variant; при отказе — целочисленный Error. Error.Ok вместо объекта не означает успех: любое целое трактуется как код ошибки и не возвращает ресурс. Ограничивайте размеры до выделения памяти.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
originalPath | string | — |
useSubThreads | bool | — |
cacheMode | int | — |
pathФактический путь для чтения после маршрутизации ресурса. Не подменяйте его безусловно originalPath.
originalPathИсходный логический путь до перенаправления/импорта. Может отличаться от path; это контекст ресурса, не команда читать исходный ассет.
useSubThreadsРазрешение использовать дополнительные потоки. true само не запускает их для вашего кода и не делает обработчик потокобезопасным.
cacheModeЧисловое значение ResourceFormatLoader.CacheMode. Согласуйте с ним загрузку зависимостей и обновление данных своего формата.
VariantVariant с Resource при успехе или целым Error при отказе. Пустой Variant не создаёт ресурс и не заменяет полезный код ошибки.
_RecognizePathbool
public virtual bool _RecognizePath(string path, StringName type);Определяет, подходит ли обработчик пути и подсказке типа. Без переопределения нативная реализация сопоставляет суффикс без учёта регистра с расширениями и при непустом type использует _HandlesType, а не _GetResourceType. Собственное переопределение заменяет эту проверку.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
type | StringName | — |
pathПуть файла собственного формата: логический asset:// или user:// согласно месту хранения.
typeНеобязательная подсказка встроенного типа, например Resource. Пустая строка не ограничивает тип при стандартном выборе по пути.
booltrue, если путь подходит формату. Это выбор обработчика, не проверка содержимого или прав доступа.
_RenameDependenciesError
public virtual Error _RenameDependencies(string path, Reckfell.Collections.Dictionary renames);Переписывает внешние ссылки внутри файла по таблице замен и сохраняет результат. Изменить только переданный Dictionary недостаточно. Без переопределения нативный обработчик возвращает Ok, ничего не переписывая: этот код сам по себе не доказывает исправление ссылок.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
renames | Reckfell.Collections.Dictionary | — |
pathПуть файла собственного формата: логический asset:// или user:// согласно месту хранения.
renamesDictionary строковых путей: старый путь → новый путь. Замените ссылки в содержимом файла; сама таблица не переименовывает файл.
ErrorError.Ok после успешной поддерживаемой операции либо конкретный Error при отказе.
ResourceFormatLoader.CacheMode
| Значение | Описание |
|---|---|
Ignore = 0 | Ни основной ресурс (тот, который был запрошен для загрузки), ни какой-либо из его подресурсов не извлекается из кэша и не сохраняется в нем. Зависимости (внешние ресурсы) загружаются с |
IgnoreDeep = 3 | Подобно |
Replace = 2 | Как |
ReplaceDeep = 4 | Подобно |
Reuse = 1 | Основной ресурс (тот, который был запрошен для загрузки), его подресурсы и его зависимости (внешние ресурсы) извлекаются из кэша, если они присутствуют, а не загружаются. Те, которые не кэшируются, загружаются и затем сохраняются в кэше. Те же правила рекурсивно распространяются вниз по дереву зависимостей (внешние ресурсы). |