HTML Diff
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