Перейти к основному содержимому

Пример Types

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

Волна обычных и элитных врагов движется к центру.Волна обычных и элитных врагов движется к центру.

Волна обычных и элитных врагов движется к центру.

Как открыть​

  1. Импортируйте пример: Tools → Aspid 🐍 → FastTools → Welcome → Samples → Import у Types.
  2. Откройте Scenes/Types.unity и войдите в Play Mode: каждые шесть секунд по кругу появляются восемь врагов, каждый четвёртый — ArmoredGrunt, и идут к центру.

Попробуйте​

Выйдите из Play Mode и выберите Enemy Spawner.

Типы врагов и паттерн расстановки в инспекторе.Типы врагов и паттерн расстановки в инспекторе.

Типы врагов и паттерн расстановки в инспекторе.

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

Куда смотреть​

ФайлЧто показывает
Scripts/EnemySpawner.csSerializableMonoScript<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 — то же окно выбора, открытое из редакторского кода.