PragmaGames
@PragmaGames
Увлекаюсь Unity.

Не опасно ли сериализовать классы таким способом касательно unity?

Всем привет. Немного длинно-вопроса вам в ленту )). В своем проекте я хотел бы отказаться от 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 при своей работе (Либо это тоже самое и монобехи внутри так же просто помечены данным атрибутом)?
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
// Не виден из инспектора, но он будет сереализован

Что и доказательства этого утверждения есть?

В остальном ход ваших мыслей правильный. Наследовать класс-данные от MonoBehaviour и не использовать его как компонент в сцене - это ужасно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы