Всем привет. Немного длинно-вопроса вам в ленту )). В своем проекте я хотел бы отказаться от monobehaviour классов в основной логике. Сделать нечто подобное :
public class Tower : MonoBehaviour
{
[SerializeField] protected HealthComponent healthComponent;
private ArmsComponent _armsComponent;
}
[Serializable]
public class ArmsComponent
{
public int typeArm;
// Логика класса
}
[Serializable]
public class HealthComponent
{
public int health;
// Логика класса
}
То есть разделить логику отдельной сущности на различные компоненты и потом с помощью композиции собирать другие различные сущности. И для удобства конечно же хочется иметь доступ к таким классам (Не унаследованным от монобехов) из инспектора. Я пометил их атрибутом [Serializable], и вроде все нормально. Но тут нюансы, насколько я знаю [Serializable] вызывают рекурсивное создание классов которые подходят под тип сериеализации даже если они приватные, но внутри помеченные атрибутов [Serializable]. Например :
[Serializable]
public class HealthComponent
{
// Виден из инспектора
public int health;
// Не виден из инспектора, но он будет сереализован так как сам класс так же помечен атрибутов [Serializable]
private ArmsComponent armsComponent;
}
Я конечно знаю о существовании [NonSerialized]. И все такие места можно помечать данным атрибутом.
И тут такие вопросы: На сколько это важно ? Нормальный ли такой подход в целом (помечать логические классы [Serializable] только для того что бы данные были видны в инспекторе. Чем такой подход отличается от того что используют MonoBehaviour при своей работе (Либо это тоже самое и монобехи внутри так же просто помечены данным атрибутом)?