Создаем класс с возможностью сериализации в Unity

Когда подготовка к сериализации данных закончена, можно создавать соответствующий класс. Давайте создадим новый скрипт, назовем его Game и объявим в нем переменные:

Как известно, в RPG-играх (в той же Final Fantasy) игроку предлагается выбор класса персонажа. К примеру, это может быть маг, разбойник или рыцарь. В нашем случае важно обратить внимание на строчку [System.Serializable] -- она говорит движку, что данный скрипт можно сериализовать. Неплохо, не правда ли?

Если обратиться к официальной документации, то мы увидим, что Unity может сериализовать несколько типов данных:

  1. Все базовые типы данных (int, string, float и пр.).
  2. Ряд встроенных типов (Vector2/Vector3/Vector4, Color, Rect, Quaternion, Matrix4x4, LayerMask).
  3. Классы, которые унаследованы от UnityEngine.Object (Component, GameObject, MonoBehavior, AnimationClip, Texture2D).
  4. Перечисляемый тип (Enums).
  5. Массивы.
  6. Списки тех типов данных, которые перечислены выше.

В нашем классе первой объявленной переменной является current. Эта переменная не что иное, как статическая ссылка на экземпляр игры. В тот момент, когда мы станем сохранять либо загружать какие-нибудь данные, нам надо будет обращаться к «текущей» игре. Применение в этом случае статических переменных упростит нашу задачу, то есть вызывать лишние методы не потребуется. Весьма удобно.

Теперь обратите свое внимание на класс под названием Character. Его у нас еще нет — создадим новый скрипт с соответствующим названием:

Заметили ли вы что-нибудь странное? Да, нам действительно пришлось создать новый класс, а внутри этого класса есть ровно 1 строковая переменная. Конечно же, мы могли задействовать в нашем скрипте Game переменные типа string, а не экземпляры класса Character. Но мы сейчас не ставим задачу написать идеальный код, наша цель -- просто решить задачу по сохранению и загрузке игры с применением сериализации.

Итак, теперь наши классы настроены, а значит, пришло время добавить возможность сохранения будущей игры. Но об этом -- в следующий раз, следите за обновлениями блога!

По материалам статьи "How to Save and Load Your Players' Progress in Unity".