Пример SerializeReferences
Турель, у которой оружие и его эффекты выбираются в инспекторе, и нарочно сломанные ассеты, чтобы их починить.


Манекен меняет цвет и уменьшается от урона настроенного оружия и эффектов.
Как открыть
- Импортируйте пример: Tools → Aspid 🐍 → FastTools → Welcome → Samples → Import у SerializeReferences.
- Откройте
Scenes/SerializeReferences.unityи войдите в Play Mode: основное и запасное оружие по очереди бьют манекен, а каждый удар виден в Console.
Попробуйте
Выйдите из Play Mode и выберите Loadout.


Оружие, вложенный эффект горения и модификаторы в инспекторе Loadout.
- Выбор класса. Откройте список Primary: окно выбора с поиском перечисляет все конкретные
IWeaponв группах Weapons/Melee и Weapons/Ranged из[TypeSelectorDisplay].DebugWeaponскрыт черезHidden. ВыберитеShotgun— его поля появятся под списком. - Общие данные сохраняются. В Sidearms поставьте у
PistolDamage =37, переключите его наShotgunи обратно: Damage по-прежнему37, потому что_damageобъявлено в обоих классах. - Списки. Нажмите + у Sidearms: вместо копии последнего элемента открывается окно выбора, и новый элемент получает собственный экземпляр. В Play Mode он встанет в очередь выстрелов.
- Сужение. Melee Backup объявлено как
IWeapon, но[TypeSelector(typeof(IMelee))]предлагает толькоSword. Поле Weapon в слотах Holster сужено так же, уровнем глубже, внутри обычного[Serializable]-класса:[TypeSelector(typeof(IRanged))]предлагает только дальнобойное оружие. В очередь выстрелов оба поля не входят. - Вложенные ссылки. У
Railgunв Primary есть Charge Effect — собственный[SerializeReference]со своим списком. В нёмBurnEffect, поэтому от попадания рейлгана манекен загорается. - Абстрактная база. On Hit —
StatusEffect: окно выбора предлагаетBurnEffectиFreezeEffect, но не абстрактный класс. - Generics.
- Damage Modifier —
Modifier<float>: предлагаютсяDamageModifierиModifier<Single>, оба создаются сразу. - Perks —
List<IModifier>: кроме закрытых наследников предлагается открытыйModifier<T>, типTвыбирается на второй странице. - Урон меняет только
DamageModifier; значения остальных выводит Loadout → Log Loadout в контекстном меню компонента.
- Damage Modifier —
- Обязательное поле. Поставьте Primary в
<None>: под полем появится предупреждение. Сохраните сцену — Project References → Scan Project и CI с-srGateRequiredпокажут поле как нарушение; сборка плеера его не проверяет (что проверяет каждый запуск). - Меню заголовка. Правый клик по заголовку поля — копирование и вставка, шаблоны, поиск использований и новый скрипт: все пункты.
Ремонт
Ассеты в Presets/ и Prefabs/ хранят потерянные или устаревшие типы.
- Fix на одном ассете. Выберите
Presets/BrokenWeaponPreset.asset: Weapon хранит несуществующийGhostWeapon, а уведомление Missing type под полем предлагает Fix. Нажмите его и выберитеPistol— Damage25и Magazine Size8сохранятся. - Fix для группы. Откройте Tools → Aspid 🐍 → FastTools → Project References и нажмите Scan Project: три записи
GhostWeaponизBrokenArsenalPreset.assetсобраны в одну группу, и Fix all исправляет их разом. - Подсказка класса.
Presets/MovedWeaponPreset.assetхранитPistolпод старым пространством имён. Уведомление предлагает → Pistol, а группа в Project References — Smart Fix → Pistol; сами они не применяются. - Миграция.
Presets/RenamedWeaponPreset.assetхранитCrossbowLauncher, а класс теперь называетсяCrossbowи помечен[MovedFrom]: инспектор уже показываетCrossbow, устарел только файл. Migrate all → Crossbow в Project References записывает новое имя в файл. - Префаб. Выберите
Prefabs/BrokenLoadout.prefabв окне Project.Sidearms[2]— потерянныйGhostCrossbowс Fix;Sidearms[0]и[1]указывают на одинPistolи помечены Shared reference #N, а Make unique даёт элементу собственную копию. Вкладка Asset References показывает все ссылки префаба.
Чтобы пройти ремонт заново, импортируйте пример повторно с перезаписью файлов.
IMGUI-инспектор
У WeaponPreset инспектор на IMGUI — Scripts/Editor/WeaponPresetEditor.cs: поле и список рисуют обычные вызовы EditorGUILayout.PropertyField(), а окно выбора, Fix и + списка работают как в UI Toolkit. Поля без [TypeSelector] — в разделе Собственный инспектор.
Куда смотреть
| Файл | Что показывает |
|---|---|
Scripts/Loadout.cs | Все формы поля: одиночное, список, суженное, контейнер, абстрактная база, закрытый и открытый generic, Required |
Scripts/Weapons/ | Иерархия IWeapon, группы [TypeSelectorDisplay], скрытый через Hidden класс, [MovedFrom] на Crossbow, вложенная ссылка в Railgun |
Scripts/Effects/, Scripts/Modifiers/ | Абстрактная база и открытый generic-класс |
Scripts/WeaponPreset.cs, Presets/, Prefabs/ | Сценарии ремонта |
Scripts/Editor/WeaponPresetEditor.cs | IMGUI-инспектор на обычных вызовах PropertyField |
Справочник — SerializeReference Selector и SerializeReference Tooling.