Данный пакет позволяет вам использовать атрибут [ChoiceReference] для создания popup взаимодействия для выбора подкласса, от которого наследуется базовый класс, указанный вами в качестве типа поля. Списки и массивы также поддерживаются, как и тот факт, что этот атрибут будет снова использоваться в подклассах.
Чтобы добавить данный пакет в проект, нужно выполнить следующие шаги:
- Откройте PackageManager;
- Выберите "Add package from get URL";
- Вставьте ссылки на пакеты, которые являются зависимостями данного пакета:
https://github.com/Paulsams/MiscUtilities.git4Вставьте ссылку на данный пакет:https://github.com/Paulsams/ChoiceReferenceAttribute.git
- RepairerSerializeReferences (пока что только с 2021.2) - окно редактора, которое позволяет починить ссылки, которые слетели в связи со сменой названия класса, пространстрва имён или сборки: https://github.com/Paulsams/RepairerSerializeReferences
- Использует:
- Работает для листов/массивов и для любой вложенности данного атрибута;
ВАЖНО: чтобы атрибут работал с листами или массивами, то нужно обязательно базовому классу дописать [System.Serializable]. Не спрашивайте меня почему - такова жизнь:
[SerializeReference, ChoiceReference] private BaseClass _singleChoiceReference;
[SerializeReference, ChoiceReference] private List<BaseClass> _listChoiceReferences;- Можно в параметрах атрибута указать флаг nullable, который позволяет из выбора убрать задание объекту состояние "null". Если он будет "false" (а это есть значение по умолчанию), то Вам всё равно надо будет в первый раз выбрать тип, а иначе была бы рекурсия, если в объекте будет поле с этим же атрибутом.
[SerializeReference, ChoiceReference(true)] private BaseClass _singleChoiceReferenceNullable;
[SerializeReference, ChoiceReference] private BaseClass _singleChoiceReferenceNotNullable;- ISerializeReferenceChangeValidate - интерфейс, который вы можете реализовать у наследника для того, чтобы сделать какую-то свою проверку, что валидна ли в данный момент смена типа.
- Контекстное меню с копированием в буфер обмена, а также проверкой, что вставка валидна.

- Доступно множественное редактирование объектов.
ChoiceReferenceAttribute(bool nullable)Чтобы скачать примеры к данному пакету:
- Выберите данный пакет в PackageManager;
- Раскройте справа вкладку "Samples";
- И нажмите кнопку "Import" на интересующем вас примере.

