Пример Types
Спавнер, в котором тип врага и схема волны выбираются в инспекторе, без правки кода.


Волна обычных и элитных врагов движется к центру.
Как открыть
- Импортируйте пример: Tools → Aspid 🐍 → FastTools → Welcome → Samples → Import у Types.
- Откройте
Scenes/Types.unityи войдите в Play Mode: каждые шесть секунд по кругу появляются восемь врагов, каждый четвёртый —ArmoredGrunt, и идут к центру.
Попробуйте
Выйдите из Play Mode и выберите Enemy Spawner.


Типы врагов и паттерн расстановки в инспекторе.
- Тип компонента переживает переименование. Enemy Type —
SerializableMonoScript<Enemy>: вместе с именем класса поле хранит ссылку на ассет скрипта. Переименуйте класс вScripts/Enemies/Grunt.csвFootmanвместе с файлом и его.meta, чтобы обновился и наследникArmoredGrunt. После компиляции поле показываетFootman;SerializableTypeна его месте показал бы<Missing …>. - Зависимое окно выбора. Elite Type — строка с
[TypeSelector(nameof(_enemyType))]: окно выбора предлагает только класс из Enemy Type и его наследников. Переключите Enemy Type наArcherи откройте Elite Type: в спискеArcherиSniper, аArmoredGruntнет. В самом полеArmoredGruntостаётся, пока вы не выберете другой тип, — выберитеSniper. - Имена, группы и иконки. Откройте Pattern: паттерны собраны в группу Spawn Patterns, у каждого своё имя, подсказка и иконка из
[TypeSelectorDisplay].OriginPatternскрыт черезHidden, аAllow = TypeAllow.Noneна поле убирает из списка сам интерфейсISpawnPattern. Выберите Grid и войдите в Play Mode: волны встанут сеткой. - Обязательное поле. Поставьте Enemy Type в
<None>: под полем появится предупреждение. Сохраните сцену — Project References → Scan Project и CI с-srGateRequiredпокажут поле как нарушение; сборка плеера его не проверяет (что проверяет каждый запуск). - Замена компонента на месте. Выберите Placed Enemy (swap its type) и поставьте Health =
250. Выпадающий список вверху инспектора — полеComponentTypeSelectorвEnemy. ПереключитеArcherнаBrute: Health и Speed объявлены в общей базе и сохранили значения, а Keep Distance, которое есть только уArcher, исчезло.
Куда смотреть
| Файл | Что показывает |
|---|---|
Scripts/EnemySpawner.cs | SerializableMonoScript<T> с Required, [TypeSelector] со ссылкой на другое поле, SerializableType<T> с Allow = TypeAllow.None, получение типа через .Type и Type.GetType() |
Scripts/Enemies/Enemy.cs | Поле ComponentTypeSelector в базовом классе; наследники в той же папке |
Scripts/Spawning/ | Интерфейс ISpawnPattern и паттерны — обычные C#-классы с [TypeSelectorDisplay] |
Справочник — Serializable Type System и ComponentTypeSelector. См. также пример SerializeReferences — [TypeSelector] на полях [SerializeReference] — и EditorTools — то же окно выбора, открытое из редакторского кода.