ComponentTypeSelector
Класс компонента меняется прямо в инспекторе, а общие поля сохраняют значения.
Быстрый старт
public abstract class EnemyBase : MonoBehaviour
{
[SerializeField] private ComponentTypeSelector _enemyType;
[SerializeField] private float _health = 100f;
}
| FastEnemy.cs | ArmoredEnemy.cs |
|---|---|
| |
Список предлагает конкретных наследников класса, где объявлено поле; пункта <None> нет.


| Поле | FastEnemy | Выбран ArmoredEnemy | Снова FastEnemy |
|---|---|---|---|
| Health | 75 | 75 | 75 |
| Speed | 40 | — | 25 |
| Armor | — | 10 | — |
Когда тип не меняется
Смена следует правилам Add Component: сначала добавляет компоненты из [RequireComponent] нового класса, и один Undo откатывает её вместе с ними. Класс остаётся прежним, а Console показывает предупреждение, если:
- у класса нет своего файла скрипта с тем же именем — например, вложенный класс или второй класс в файле;
- новый класс помечен
[DisallowMultipleComponent], а такой компонент на GameObject уже есть; - смена убрала бы класс, который нужен другому компоненту;
- новому классу нужен компонент, который нельзя добавить, например абстрактный
Collider.
Пример в пакете
Переключение типа компонента показано в примере Types.