Создаем класс с возможностью сериализации в Unity
Когда подготовка к сериализации данных закончена, можно создавать соответствующий класс. Давайте создадим новый скрипт, назовем его Game и объявим в нем переменные:
Как известно, в RPG-играх (в той же Final Fantasy) игроку предлагается выбор класса персонажа. К примеру, это может быть маг, разбойник или рыцарь. В нашем случае важно обратить внимание на строчку
Если обратиться к официальной документации, то мы увидим, что Unity может сериализовать несколько типов данных:
- Все базовые типы данных (int, string, float и пр.).
- Ряд встроенных типов (Vector2/Vector3/Vector4, Color, Rect, Quaternion, Matrix4x4, LayerMask).
- Классы, которые унаследованы от UnityEngine.Object (Component, GameObject, MonoBehavior, AnimationClip, Texture2D).
- Перечисляемый тип (Enums).
- Массивы.
- Списки тех типов данных, которые перечислены выше.
В нашем классе первой объявленной переменной является current. Эта переменная не что иное, как статическая ссылка на экземпляр игры. В тот момент, когда мы станем сохранять либо загружать какие-нибудь данные, нам надо будет обращаться к «текущей» игре. Применение в этом случае статических переменных упростит нашу задачу, то есть вызывать лишние методы не потребуется. Весьма удобно.
Теперь обратите свое внимание на класс под названием Character. Его у нас еще нет — создадим новый скрипт с соответствующим названием:
Заметили ли вы что-нибудь странное? Да, нам действительно пришлось создать новый класс, а внутри этого класса есть ровно 1 строковая переменная. Конечно же, мы могли задействовать в нашем скрипте Game переменные типа string, а не экземпляры класса Character. Но мы сейчас не ставим задачу написать идеальный код, наша цель -- просто решить задачу по сохранению и загрузке игры с применением сериализации.
Итак, теперь наши классы настроены, а значит, пришло время добавить возможность сохранения будущей игры. Но об этом -- в следующий раз, следите за обновлениями блога!
По материалам статьи "How to Save and Load Your Players' Progress in Unity".