Извините за неинформативный заголовок, но я не знаю чего именно хочу )))) - с одной стороны решить свою задачу (описано ниже) наиболее адекватным для unity способом, с другой стороны обсудить проблему (тоже описанно ниже) с которой наверняка многие сталкивались при создании чего-то более сложного чем просто монобехавор с публичными переменными.
Дело в том что Unity рекомендует пользоваться SerialiedProperty для сохранения всего и вся. Действительно хоть, эти объекты и имеют неудобный интерфейс, их использование позволяет автоматически корректно синхронизировать свойства префаба и его экземпляров - великое дело, так как для реализации того же самого вручную приходится вступать в кровавый бой с unity из которого лично я, не вышел победителем (хотя я в юнити новичок, так что буду рад если просвятите меня на этот счет). Поэтому я очень бы хотел использовать именно SerialiedProperty для решаемой сейчас задачи. Но пытаясь это сделать я наткнулся на какой-то чудовищный, фундаментальный недостаток системы сериализации в Unity который рубит на корню все мои попытки, а именно - отсутствие легкого и сериализуемого по значению типа производного от UnityEngine.Object.
пример, почему это так плохо:
Я хочу сделать инвентарь в котором одинаковые предметы группируются вместе, так чтобы игрок сразу видел что у него, например, 15 зелий лечения, 1 стальная кираса и 6785 дырявых ботинок.
Естественно все это представить как:
List<ItemGroup>;
где ItemGroup выглядит так:
[Serializable]
public class ItemGroup
{
public Item Item; // Класс Item - Monobehaviour прикрепленный к префабу
public int Count;
}
И вот проблема на лицо, ведь ItemGroup не может же быть ScriptableObject-ом так как он должен сохраняться в отдельный файл а у меня может быть, например, таких групп в одном инвентаре 50, и персонажей с инвентарями по 50 штук в каждой из 50 сцен и еще префабы ведь. Теоритически, наверное, можно сделать ItemGroup монобехавором, но тогда будет просто страшно смотреть на инспектор персонажа захламленный десятками лишних компонентов представляющих то что и так доступно через инспектор инвентаря.
Получается единственно разумная реализация самого обычного для многих rpg инвентаря абсолютно не реализуема если хочешь использовать хваленые SerialiedProperty, так как они имеют дело только с встроенными типами и UnityEngine.Object.
В общем что мне делать, и как другие люди с этим справляются? Может быть есть альтернативные способы синхронизации "как в Unity" без SerialiedProperty? И вообще, может быть где-нибудь есть запрос к Unity решить как-то эту проблему(например добавлением нового типа) под которым можно подписаться среди других страждущих?
Заранее благодарю и извиняюсь за сумбурное изложение .