reckfellENGINE

ResourceLoader

Загрузка ресурсов, общий cache и управляемый lifecycle фоновых заявок.

На этой странице
class ResourceLoaderReckfellSharp

ResourceLoader загружает подготовленные ресурсы, а не произвольные исходные файлы. Загруженный PackedEntity ещё не находится в дереве игры: нужны Instantiate() и AddChild().

Reuse может вернуть общий native объект и тот же C# wrapper. Не Dispose такую ссылку, пока её aliases используются. Ignore не означает независимость всех внешних зависимостей; для проверенного text backend глубину задают IgnoreDeep/ReplaceDeep. Replace способен обновить уже удерживаемый объект.

Фоновая схема: LoadThreadedRequest() → статус между кадрами → LoadThreadedGet(). Используйте ту же строку пути и балансируйте сборы при повторных Request. Ранний Get может блокировать; это не система стриминга мира.

Готовый фоновый загрузчик, внешние исходные файлы. Проверки выполнены на Windows в отдельных проектах; сбои загрузки, политика отсутствующих зависимостей, импорт/экспорт и GPU-сцены здесь не выполнялись.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Свойства1

SingletonСвойство
# Singleton
C#
public static ResourceLoaderInstance Singleton { get; }

Заимствованный wrapper глобального ResourceLoader, не отдельный загрузчик на каждый вызов. Не Free()/Dispose() engine-owned Singleton. Для обычных операций используйте статические методы; ResourceFormatLoader регистрируется отдельно.

Методы16

AddResourceFormatLoadervoid
# AddResourceFormatLoader
C#
public static void AddResourceFormatLoader(ResourceFormatLoader formatLoader, bool atFront = false);

Добавляет собственный format loader в глобальный список; atFront=true даёт приоритет перед текущими обработчиками. Удерживайте экземпляр до явного удаления регистрации. Повтор того же instance создаёт дубликат, не обновляет существующий; это проверено. Неверный объект/лимит дают диагностику, отдельного Error нет. Не регистрируйте заново перед каждым Load.

Параметры
ИмяТипПо умолчанию
formatLoaderResourceFormatLoader—
atFrontboolfalse
formatLoader

Тот же собственный ResourceFormatLoader для регистрации/удаления; учитывайте число Add.

atFront

True вставляет перед существующими loaders; false добавляет в конец.

Existsbool
# Exists
C#
public static bool Exists(string path, string typeHint = "");

Проверяет ресурс по кэшу или loader, а не обязательно наличие корректного файла на диске. Cached ресурс даёт true даже после удаления файла и до проверки typeHint. Некорректный файл с распознаваемым расширением тоже может дать true без parsing. Не используйте как гарантию успешного Load<T>() или совпадения C# типа; результат загрузки проверяйте отдельно.

Параметры
ИмяТипПо умолчанию
pathstring—
typeHintstring""
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

typeHint

Необязательное имя engine-типа для выбора loader; не C# typeof(T) и не гарантия фактического типа cached результата.

Возвращает bool

Ответ cache/loader; true не гарантирует существующий корректный файл или нужный C# тип.

GetCachedRefResource
# GetCachedRef
C#
public static Resource GetCachedRef(string path);

Получает Resource из cache либо null, не читая отсутствующий там файл. Может вернуть тот же C# wrapper, который уже использует другой код; это подтверждено ReferenceEquals. Ранний Dispose такой ссылки делает другие managed aliases недействительными. Согласуйте общий срок жизни вместо независимого освобождения каждого alias. Это не clone и не обновление с диска.

Параметры
ИмяТипПо умолчанию
pathstring—
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

Возвращает Resource

Cached Resource либо null; возможен тот же managed wrapper, не независимая копия.

GetDependenciesstring[]
# GetDependencies
C#
public static string[] GetDependencies(string path);

Собирает объявленные внешние зависимости через format loaders, не рекурсивное дерево загруженных объектов. Элемент может быть обычным путём или записью UID::тип::fallback; публичная обёртка не добавляет тип, поэтому среднее поле может быть пустым. Не передавайте такую составную строку целиком в файловый API. Пустой список не отличает отсутствие зависимостей от неподдержанного/ошибочного формата. Импорт, UID remap и custom loaders могут менять представление.

Параметры
ИмяТипПо умолчанию
pathstring—
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

Возвращает string[]

Массив dependency records; не обязательно массив готовых OS paths.

GetRecognizedExtensionsForTypestring[]
# GetRecognizedExtensionsForType
C#
public static string[] GetRecognizedExtensionsForType(string type);

Запрашивает расширения у зарегистрированных loaders для имени engine-типа, не C# System.Type. Пустое имя может запросить общий набор. Имена без точки; возможны дубликаты и изменения после регистрации плагинов. Список не доказывает существование, импортированность или корректность отдельного файла.

Параметры
ИмяТипПо умолчанию
typestring—
type

Имя engine-типа; пустая строка для общего запроса. Не объект System.Type.

Возвращает string[]

Имена расширений без точки, возможно с повторами.

GetResourceTypestring
# GetResourceType
C#
public static string GetResourceType(string path);

Спрашивает loaders о типе ресурса по пути; это metadata query и может выполнять I/O. Не является C# приведением результата или гарантией полной загрузки. Для custom C# ресурса сообщаемый engine base type может отличаться от имени managed-класса. Пустая строка означает отсутствие распознанного типа, не отдельный подробный Error.

Параметры
ИмяТипПо умолчанию
pathstring—
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

Возвращает string

Имя engine-типа либо пустая строка без распознанного результата.

GetResourceUidlong
# GetResourceUid
C#
public static long GetResourceUid(string path);

В игровом runtime запрашивает reverse registry ResourceUid по нормализованному пути; не сканирует UID-заголовок любого файла. Для неизвестного пути возвращает InvalidId. Устаревшая reverse-запись после SetId/RemoveId может дать ID без актуального HasId(). Редактор использует другой путь через loaders; редакторное сканирование здесь не проверялось.

Параметры
ИмяТипПо умолчанию
pathstring—
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

Возвращает long

Registry ID либо InvalidId в runtime; доступность файла проверяется отдельно.

HasCachedbool
# HasCached
C#
public static bool HasCached(string path);

Проверяет запись пути в resource cache после нормализации пути. Не загружает файл, не проверяет свежесть данных, наличие файла и фактический тип. Удерживаемый ресурс может оставаться в cache после удаления/изменения файла. Не обещает, что запись сохранится после освобождения всех владельцев.

Параметры
ИмяТипПо умолчанию
pathstring—
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

Возвращает bool

True для текущей записи cache, не проверки свежести/файла.

ListDirectorystring[]
# ListDirectory
C#
public static string[] ListDirectory(string directoryPath);

Перечисляет непосредственные имена каталогов и распознаваемых ресурсов, не все физические файлы и не рекурсивное дерево. Каталоги оканчиваются /; sidecars .import/.remap/.uid сводятся к исходному имени, результат сортируется и устраняет повторы. Распознавание расширения не доказывает корректный parsing: в тесте присутствовал некорректный .rdata. Пустой массив также возможен при ошибке открытия/начала обхода. Export/import backend здесь не выполнялись.

Параметры
ИмяТипПо умолчанию
directoryPathstring—
directoryPath

Каталог для непосредственного перечисления; не glob и не рекурсивный запрос.

Возвращает string[]

Отсортированные уникальные имена с / для каталогов; пустое также возможно при ошибке.

Load2 перегрузки
# Load · 1/2
C#
public static Resource Load(string path, string typeHint = "", ResourceLoader.CacheMode cacheMode = ResourceLoader.CacheMode.Reuse);

Синхронно получает Resource через выбранный формат и режим кэша; при неудаче возможны null и диагностика движка. Это не создание Entity: PackedEntity ещё нужно Instantiate()/AddChild(). Reuse может вернуть тот же native объект и тот же C# wrapper; не Dispose общий wrapper, пока другие ссылки его используют. На проверенном text backend Ignore создаёт независимый основной ресурс, но переиспользует внешние зависимости; IgnoreDeep читает их независимо. Replace может обновить удерживаемый объект совместимого типа, а ReplaceDeep также обновляет внешние зависимости. Изменения файла не обновляют Reuse автоматически. Поведение собственного loader должно учитывать cacheMode.

Параметры
ИмяТипПо умолчанию
pathstring—
typeHintstring""
cacheModeResourceLoader.CacheModeResourceLoader.CacheMode.Reuse
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

typeHint

Необязательное имя engine-типа для выбора loader; не C# typeof(T) и не гарантия фактического типа cached результата.

cacheMode

Политика cache; у text loader обычные Ignore/Replace не обновляют внешние зависимости, глубокие режимы распространяются на них. Replace может изменить уже используемые объекты.

Возвращает Resource

Resource либо null; generic overload дополнительно выполняет приведение к T и может бросить InvalidCastException.

# Load · 2/2
C#
public static T Load<T>(string path, string typeHint = null, ResourceLoader.CacheMode cacheMode = ResourceLoader.CacheMode.Reuse) where T : class;

Синхронно получает Resource через выбранный формат и режим кэша; при неудаче возможны null и диагностика движка. Это не создание Entity: PackedEntity ещё нужно Instantiate()/AddChild(). Reuse может вернуть тот же native объект и тот же C# wrapper; не Dispose общий wrapper, пока другие ссылки его используют. На проверенном text backend Ignore создаёт независимый основной ресурс, но переиспользует внешние зависимости; IgnoreDeep читает их независимо. Replace может обновить удерживаемый объект совместимого типа, а ReplaceDeep также обновляет внешние зависимости. Изменения файла не обновляют Reuse автоматически. Поведение собственного loader должно учитывать cacheMode. Generic обёртка только приводит native результат к T. Она не выводит typeHint из T; несовпадение может дать InvalidCastException, не null.

Параметры
ИмяТипПо умолчанию
pathstring—
typeHintstringnull
cacheModeResourceLoader.CacheModeResourceLoader.CacheMode.Reuse
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

typeHint

Необязательное имя engine-типа для выбора loader; не C# typeof(T) и не гарантия фактического типа cached результата.

cacheMode

Политика cache; у text loader обычные Ignore/Replace не обновляют внешние зависимости, глубокие режимы распространяются на них. Replace может изменить уже используемые объекты.

Возвращает T

Resource либо null; generic overload дополнительно выполняет приведение к T и может бросить InvalidCastException.

LoadThreadedGetResource
# LoadThreadedGet
C#
public static Resource LoadThreadedGet(string path);

Собирает один результат ранее принятой пользовательской заявки. До завершения может ждать и блокировать вызывающий поток; в обычном flow сначала дождитесь Loaded. После Failed также завершите lifecycle заявки, ожидая null и диагностику loader. Один вызов уменьшает счётчик заявок; при двух одинаковых Request нужны два сбора. После полного сбора status становится InvalidResource. Без заявки/после её потребления возвращает null; полученный Resource может быть общим cached wrapper.

Параметры
ИмяТипПо умолчанию
pathstring—
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

Возвращает Resource

Результат Resource либо null; вызов может ожидать готовность и потребляет одну заявку.

LoadThreadedGetStatusResourceLoader.ThreadLoadStatus
# LoadThreadedGetStatus
C#
public static ResourceLoader.ThreadLoadStatus LoadThreadedGetStatus(string path, Reckfell.Collections.Array progress = null);

Возвращает статус заявки по исходной строке path, а не произвольному эквивалентному OS path. InvalidResource также означает, что заявки ещё не было либо все её результаты собраны; это не только несуществующий файл. Переданный progress Array перезаписывается одним числом 0…1, стирая прежние элементы; выделяйте собственный массив. Статус Loaded, не одна величина progress, разрешает обычный сбор. Не блокируйте главный поток циклом без кадров.

Параметры
ИмяТипПо умолчанию
pathstring—
progressReckfell.Collections.Arraynull
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

progress

Собственный Array, перезаписываемый одним progress числом; null пропускает этот результат.

Возвращает ResourceLoader.ThreadLoadStatus

InvalidResource, InProgress, Failed или Loaded; progress не заменяет статус.

LoadThreadedRequestError
# LoadThreadedRequest
C#
public static Error LoadThreadedRequest(string path, string typeHint = "", bool useSubThreads = false, ResourceLoader.CacheMode cacheMode = ResourceLoader.CacheMode.Reuse);

Запускает/получает пользовательскую заявку на фоновую загрузку Resource. Error.Ok не означает готовый результат: опрашивайте LoadThreadedGetStatus() между кадрами, затем соберите через LoadThreadedGet(). Используйте одну и ту же строку path во всех вызовах. Повтор той же строки может разделить token, увеличив число ожидаемых Get; один Get не очищает две заявки. Не рассчитывайте, что новые flags повторного Request перенастроят существующий token. Это не async C# Task, отмена или система стриминга мира.

Параметры
ИмяТипПо умолчанию
pathstring—
typeHintstring""
useSubThreadsboolfalse
cacheModeResourceLoader.CacheModeResourceLoader.CacheMode.Reuse
path

Путь ресурса, поддержанный loader; asset://, допустимый user:// или OS path, а uid:// требует актуального реестра. Для threaded lifecycle сохраняйте исходную строку.

typeHint

Необязательное имя engine-типа для выбора loader; не C# typeof(T) и не гарантия фактического типа cached результата.

useSubThreads

Разрешить распределённую загрузку зависимостей, где backend поддерживает это. Не разрешает произвольную работу с EntityTree из worker-кода.

cacheMode

Политика cache; у text loader обычные Ignore/Replace не обновляют внешние зависимости, глубокие режимы распространяются на них. Replace может изменить уже используемые объекты.

Возвращает Error

Error принятия заявки; Ok не означает Loaded.

RemoveResourceFormatLoadervoid
# RemoveResourceFormatLoader
C#
public static void RemoveResourceFormatLoader(ResourceFormatLoader formatLoader);

Удаляет первую регистрацию указанного instance. Если Add вызван дважды, один Remove оставляет другую запись; проверено. Не удаляет файлы и не является очисткой всех cached ресурсов. Удалите все свои регистрации перед Dispose собственного loader; отсутствующий/null instance даёт диагностику.

Параметры
ИмяТипПо умолчанию
formatLoaderResourceFormatLoader—
formatLoader

Тот же собственный ResourceFormatLoader для регистрации/удаления; учитывайте число Add.

SetAbortOnMissingResourcesvoid
# SetAbortOnMissingResources
C#
public static void SetAbortOnMissingResources(bool abort);

Меняет глобальную политику отказа при отсутствующих зависимостях, не локальную настройку одного Load. Во встроенном text loader false может разрешить продолжение с отсутствующей зависимостью, но не обещает пригодный ресурс или исправление схемы. Abort относится к отказу загрузки, не обещанию аварийно завершить игру. Не отключает все ошибки parsing и не отменяет фоновые заявки. В этом проходе поведение проверено по исходникам, не на повреждённых зависимостях.

Параметры
ИмяТипПо умолчанию
abortbool—
abort

Глобальная политика отказа загрузки на отсутствующих зависимостях; не переключатель отсутствия любых ошибок.

ResourceLoader.CacheMode

ЗначениеОписание
Ignore = 0

Ни основной ресурс (тот, который был запрошен для загрузки), ни какой-либо из его подресурсов не извлекается из кэша и не сохраняется в нем. Зависимости (внешние ресурсы) загружаются с ResourceLoader.CacheMode.Reuse.

IgnoreDeep = 3

Подобно ResourceLoader.CacheMode.Ignore, но распространяется рекурсивно вниз по дереву зависимостей (внешние ресурсы).

Replace = 2

Как ResourceLoader.CacheMode.Reuse, но кэш проверяется для основного ресурса (того, который запрашивается для загрузки), а также для каждого из его подресурсов. Те, которые уже находятся в кэше, пока загруженные и кэшированные типы совпадают, обновляют свои данные из хранилища в уже существующие экземпляры. В противном случае они воссоздаются как совершенно новые объекты.

ReplaceDeep = 4

Подобно ResourceLoader.CacheMode.Replace, но распространяется рекурсивно вниз по дереву зависимостей (внешние ресурсы).

Reuse = 1

Основной ресурс (тот, который был запрошен для загрузки), его подресурсы и его зависимости (внешние ресурсы) извлекаются из кэша, если они присутствуют, а не загружаются. Те, которые не кэшируются, загружаются и затем сохраняются в кэше. Те же правила рекурсивно распространяются вниз по дереву зависимостей (внешние ресурсы).

ResourceLoader.ThreadLoadStatus

ЗначениеОписание
Failed = 2

Вас постигла неудача, во время загрузки произошла ошибка.

InProgress = 1

Ресурс все еще загружается.

InvalidResource = 0

Ресурс недействителен или не был загружен с помощью ResourceLoader.LoadThreadedRequest.

Loaded = 3

Ресурс успешно загружен и к нему можно получить доступ через ResourceLoader.LoadThreadedGet.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.