Есть такая задача - хранить список разных экземпляров
В духе
public List<object> list = new List<object>();
Но проблема в том, что List<object> не сериализуем в Unity (ибо тип object не сериализуемый, так как подразумевает любой тип, как сериализуемый, так и не сериализуемый)
Все данные которые я собираюсь хранить - сериализуемы, это всякие Object, bool, int
Что делать и как быть в этой ситуации.
Я пробовал хранить объекты в генерик классе, аля Value<T> : ScriptableObject, от которого пришлось создавать кучу оболочек:
ValueBool : Value<bool> ValueString : Value<string>
Таким образом я мог хранить List<ScriptableObject>, хранящий внутри нужные мне экземпляры сериализуемых типов.
И такое решение меня совсем не устраивает, объекты становятся слишком тяжелыми
Ответ
Пробовал юзать бинарную сериализацию данных, но все заступорилось сразу как только оказалось что объекты, наследуемые от Object не помечены аттрибутом Serializable.
Запаковать Object - способа не нашел. Была идея закидывать InstanceID, однако минус в том, что достать по нему инстанс в игровом режиме нельзя - по этому идентификатору объекты восстанавливаются только в редакторе.
Отталкиваясь от этой информации и наступив на кучу прочих граблей, с уверенностью могу сказать, что "не тяжелого" способа хранить такие списки в Юнити на данный момент просто нет.
Смотрите также:
Комментарии
Лично я не вижу другого метода, кроме хранения инфы об объектах в сериализированных типах данных, структурах или классах, с соответственными методами преобразования этой самой инфы.
Вот наталкивался на мысль - может тут нужно применить какой-нибудь нестандартный метод сериализации?
Еще есть намек на использование фич сериализации 4.5.1 - они там добавили специальный интерфейс для "ручной обработки". Посмотреть, потрогать что это такое. Если получится - дополню статью по сериализации + отпишу подробней тут за результат
Пробовал юзать бинарную сериализацию данных, но все заступорилось сразу как только оказалось что объекты, наследуемые от Object не помечены аттрибутом Serializable.
Запаковать Object - способа не нашел. Была идея закидывать InstanceID, однако минус в том, что достать по нему инстанс в игровом режиме нельзя - по этому идентификатору объекты восстанавливаются только в редакторе.
Отталкиваясь от этой информации и наступив на кучу прочих граблей, с уверенностью могу сказать, что "не тяжелого" способа хранить такие списки в Юнити на данный момент просто нет.
Возможность добавлять комментарии была ограничена
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]