0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: unity, сериализация данных</p>
1
<p>Теги: unity, сериализация данных</p>
2
<p>Когда<a>подготовка к сериализации данных</a>закончена, можно создавать соответствующий класс. Давайте создадим новый скрипт, назовем его<strong>Game</strong>и объявим в нем переменные:</p>
2
<p>Когда<a>подготовка к сериализации данных</a>закончена, можно создавать соответствующий класс. Давайте создадим новый скрипт, назовем его<strong>Game</strong>и объявим в нем переменные:</p>
3
<p>Как известно, в RPG-играх (в той же Final Fantasy) игроку предлагается выбор класса персонажа. К примеру, это может быть маг, разбойник или рыцарь. В нашем случае важно обратить внимание на строчку [System.Serializable] -- она говорит движку, что данный скрипт можно сериализовать. Неплохо, не правда ли?</p>
3
<p>Как известно, в RPG-играх (в той же Final Fantasy) игроку предлагается выбор класса персонажа. К примеру, это может быть маг, разбойник или рыцарь. В нашем случае важно обратить внимание на строчку [System.Serializable] -- она говорит движку, что данный скрипт можно сериализовать. Неплохо, не правда ли?</p>
4
<p>Если обратиться к официальной документации, то мы увидим, что Unity может сериализовать несколько типов данных:</p>
4
<p>Если обратиться к официальной документации, то мы увидим, что Unity может сериализовать несколько типов данных:</p>
5
<ol><li>Все базовые типы данных (int, string, float и пр.).</li>
5
<ol><li>Все базовые типы данных (int, string, float и пр.).</li>
6
<li>Ряд встроенных типов (Vector2/Vector3/Vector4, Color, Rect, Quaternion, Matrix4x4, LayerMask).</li>
6
<li>Ряд встроенных типов (Vector2/Vector3/Vector4, Color, Rect, Quaternion, Matrix4x4, LayerMask).</li>
7
<li>Классы, которые унаследованы от<strong>UnityEngine.Object</strong>(Component, GameObject, MonoBehavior, AnimationClip, Texture2D).</li>
7
<li>Классы, которые унаследованы от<strong>UnityEngine.Object</strong>(Component, GameObject, MonoBehavior, AnimationClip, Texture2D).</li>
8
<li>Перечисляемый тип (<strong>Enums</strong>).</li>
8
<li>Перечисляемый тип (<strong>Enums</strong>).</li>
9
<li>Массивы.</li>
9
<li>Массивы.</li>
10
<li>Списки тех типов данных, которые перечислены выше.</li>
10
<li>Списки тех типов данных, которые перечислены выше.</li>
11
</ol><p>В нашем классе первой объявленной переменной является<strong>current</strong>. Эта переменная не что иное, как<strong>статическая ссылка</strong>на экземпляр игры. В тот момент, когда мы станем сохранять либо загружать какие-нибудь данные, нам надо будет обращаться к "текущей" игре. Применение в этом случае статических переменных упростит нашу задачу, то есть вызывать лишние методы не потребуется. Весьма удобно.</p>
11
</ol><p>В нашем классе первой объявленной переменной является<strong>current</strong>. Эта переменная не что иное, как<strong>статическая ссылка</strong>на экземпляр игры. В тот момент, когда мы станем сохранять либо загружать какие-нибудь данные, нам надо будет обращаться к "текущей" игре. Применение в этом случае статических переменных упростит нашу задачу, то есть вызывать лишние методы не потребуется. Весьма удобно.</p>
12
<p>Теперь обратите свое внимание на класс под названием<strong>Character</strong>. Его у нас еще нет - создадим новый скрипт с соответствующим названием:</p>
12
<p>Теперь обратите свое внимание на класс под названием<strong>Character</strong>. Его у нас еще нет - создадим новый скрипт с соответствующим названием:</p>
13
<p>Заметили ли вы что-нибудь странное? Да, нам действительно пришлось создать новый класс, а внутри этого класса есть ровно 1 строковая переменная. Конечно же, мы могли задействовать в нашем скрипте<strong>Game</strong>переменные типа string, а не экземпляры класса<strong>Character</strong>. Но мы сейчас не ставим задачу написать идеальный код, наша цель -- просто решить задачу по сохранению и загрузке игры с применением<strong>сериализации</strong>.</p>
13
<p>Заметили ли вы что-нибудь странное? Да, нам действительно пришлось создать новый класс, а внутри этого класса есть ровно 1 строковая переменная. Конечно же, мы могли задействовать в нашем скрипте<strong>Game</strong>переменные типа string, а не экземпляры класса<strong>Character</strong>. Но мы сейчас не ставим задачу написать идеальный код, наша цель -- просто решить задачу по сохранению и загрузке игры с применением<strong>сериализации</strong>.</p>
14
<p>Итак, теперь наши классы настроены, а значит, пришло время добавить возможность сохранения будущей игры. Но об этом -- в следующий раз, следите за обновлениями блога!</p>
14
<p>Итак, теперь наши классы настроены, а значит, пришло время добавить возможность сохранения будущей игры. Но об этом -- в следующий раз, следите за обновлениями блога!</p>
15
<p><em>По материалам статьи "<a>How to Save and Load Your Players' Progress in Unity</a>".</em></p>
15
<p><em>По материалам статьи "<a>How to Save and Load Your Players' Progress in Unity</a>".</em></p>
16
16