PackedEntity
Упаковка и создание иерархий уровней и префабов.
PackedEntity — Resource с сериализованной иерархией. .rscene задаёт уровень, .rprefab — префаб; роль определяется путём исходного asset, а не отдельным подклассом Entity.
Для создания: Instantiate() → проверка результата → AddChild(). До входа в дерево корень не получает обычный _Ready. Неиспользованный экземпляр нужно Free(). Generic-варианты сначала создают корень и только затем приводят тип: при несовпадении автоматической очистки нет.
Для упаковки runtime-потомков задайте Owner соответствующему корню, затем проверьте Pack(). Упаковка идёт в память; файл сохраняется отдельно через ResourceSaver. Сохраняются persistent-группы и соединения, а не все временные подписки.
Обычные ресурсы могут разделяться между экземплярами; ResourceLocalToScene отделяет ресурсы при инстанцировании. GetState() даёт общий объект метаданных, не независимый снимок.
Создание экземпляров, ресурсы. Windows headless-проверки покрывают собственную C#-иерархию; editor modes, наследование, положительный placeholder и запись/загрузка файлов здесь не выполнялись.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
PackedEntityКонструктор
public PackedEntity();Создаёт пустой контейнер сериализованной иерархии с собственным PackedEntityState. До успешного Pack/загрузки CanInstantiate=false. Это Resource, не живая Entity; добавлять в дерево нужно результат Instantiate.
Свойства1
_BundledСвойство
public Reckfell.Collections.Dictionary _Bundled { get; set; }Внутренняя Dictionary-схема сериализации. Не стабильный API редактирования уровня и не пользовательский формат сохранений. Setter восстанавливает state из взаимосвязанных массивов/индексов; изменение случайного ключа может нарушить структуру. Для обычного создания используйте Pack, для чтения — GetState. Проверен только roundtrip корректного bundle собственного QA-объекта; повреждённые данные не выполнялись.
Методы6
CanInstantiatebool
public bool CanInstantiate();Проверяет только наличие записей Entity в state. True не доказывает наличие всех скриптов/зависимостей, корректность каждого свойства или успешность будущего Instantiate. Для пустого нового PackedEntity возвращает false.
boolTrue только при непустом state, не гарантия успешного создания.
GetStatePackedEntityState
public PackedEntityState GetState();Возвращает текущее общее состояние сериализации, не снимок и не живое дерево. Повтор может вернуть тот же C# wrapper. Pack/ResetState изменяют данные, видимые через сохранённую ссылку. Не Dispose общий wrapper, пока PackedEntity или другой код продолжает им пользоваться; для обычного анализа держите владельца живым.
PackedEntityStateОбщий PackedEntityState этого ресурса, не независимая копия.
Instantiate2 перегрузки
public Entity Instantiate(PackedEntity.GenEditState editState = PackedEntity.GenEditState.Disabled);Создаёт новую иерархию Entity с восстановлением сохраняемых свойств, групп и соединений. Не вызывает AddChild и не гарантирует _Ready до входа в дерево. Владелец результата должен добавить корень в дерево либо Free неиспользованный корень; дочерние Entity освобождаются с ним. Local-to-scene ресурсы отделяются по экземплярам, обычные ресурсы могут оставаться общими. По умолчанию используйте GenEditState.Disabled. При ошибке native-создания возможны null и диагностика.
| Имя | Тип | По умолчанию |
|---|---|---|
editState | PackedEntity.GenEditState | PackedEntity.GenEditState.Disabled |
editStateDisabled для обычного runtime. Другие режимы служат редактору и требуют tools; это не настройка качества/асинхронности.
EntityНовый корень Entity либо null при native-неудаче; владелец обязан прикрепить или освободить результат.
public T Instantiate<T>(PackedEntity.GenEditState editState = PackedEntity.GenEditState.Disabled) where T : class;Создаёт новую иерархию Entity с восстановлением сохраняемых свойств, групп и соединений. Не вызывает AddChild и не гарантирует _Ready до входа в дерево. Владелец результата должен добавить корень в дерево либо Free неиспользованный корень; дочерние Entity освобождаются с ним. Local-to-scene ресурсы отделяются по экземплярам, обычные ресурсы могут оставаться общими. По умолчанию используйте GenEditState.Disabled. При ошибке native-создания возможны null и диагностика. Generic wrapper приводит уже созданный корень к T и может бросить InvalidCastException. При ошибке приведения корень автоматически не Free; для неизвестного типа сохраняйте результат негeneric Instantiate до проверки.
| Имя | Тип | По умолчанию |
|---|---|---|
editState | PackedEntity.GenEditState | PackedEntity.GenEditState.Disabled |
editStateDisabled для обычного runtime. Другие режимы служат редактору и требуют tools; это не настройка качества/асинхронности.
TНовый корень Entity либо null при native-неудаче; владелец обязан прикрепить или освободить результат. При несовпадении T — InvalidCastException.
InstantiateOrNullT
public T InstantiateOrNull<T>(PackedEntity.GenEditState editState = PackedEntity.GenEditState.Disabled) where T : class;Сначала создаёт native-иерархию, затем выполняет C# as T. При несовпадении типа возвращает null, но wrapper не освобождает уже созданный корень. Это не безопасная проверка типа перед созданием. Если тип заранее неизвестен, сохраните результат обычного Instantiate, выполните is T и явно Free корень при отказе. Совпадающий тип проверен; несовпадение разобрано по исходникам без исполнения.
| Имя | Тип | По умолчанию |
|---|---|---|
editState | PackedEntity.GenEditState | PackedEntity.GenEditState.Disabled |
editStateDisabled для обычного runtime. Другие режимы служат редактору и требуют tools; это не настройка качества/асинхронности.
TСозданный корень как T либо null; несовпадение типа не освобождает native-корень.
PackError
public Error Pack(Entity path);Сериализует переданную живую иерархию в память этого PackedEntity, не в файл. Несмотря на имя path, параметр — Entity-корень. Parent/child недостаточно: для обычных добавленных потомков задайте Owner соответствующему корню; неподходящие потомки пропускаются. Сохраняются persistent-группы/соединения и сохраняемые свойства, не всё runtime-состояние. Исходное дерево остаётся живым. Новый Pack заменяет прежний state; ошибка parsing может его очистить — атомарный откат не обещается. Для диска отдельно вызывайте ResourceSaver.Save.
| Имя | Тип | По умолчанию |
|---|---|---|
path | Entity | — |
pathЖивой корень Entity для упаковки, не строка файла; учитывайте Owner потомков.
ErrorOk для принятой упаковки либо Error; не подтверждение записи файла.
PackedEntity.GenEditState
| Значение | Описание |
|---|---|
Disabled = 0 | Обычное создание экземпляра без режима редактирования. Используйте это значение во время игры; оно задано по умолчанию. |
Instance = 1 | Режим редактирования экземпляра с подготовкой его локальных ресурсов. Доступен только в сборках редактора; для обычного запуска игры используйте Disabled. |
Main = 2 | Режим редактирования основного открытого уровня с подготовкой локальных ресурсов. Его должен получать только основной редактируемый корень. Доступен только в сборках редактора. |
MainInherited = 3 | Вариант Main для иерархии, создаваемой как основа наследуемого уровня или префаба. Доступен только в сборках редактора. |