Задать вопрос
@Just_Graf

Каким способом сохранять игровые данные для Android/IOS?

Игра на Unity и представляет из себя вождение авто в открытом мире, также в игре можно заниматься перевозкой пассажиров, тем самым зарабатывая деньги, есть тюнинг для авто. И вот нужно сохранять эти данные о купленных авто, о купленных улучшениях. Конечно же, сама логика покупок кое-как реализована, просто нужно сохранять эти покупки, кол-во монет и т. д. Я уже ознакомился с двумя способами сохранения, первый способ, через использование класса "PlayerPrefs", но этот класс не сохраняет данные типа "bool", которые имеют в проекте первостепенную роль, этот вариант отпадает (конечно, если вы не предложите обход использования "bool", заменив его на "int" и назначая таким данным "0" или "1", а надёжен ли такой способ? А может быть можно модернизировать этот класс так, чтобы он также работал с "bool"?), второй вариант "сериализация", но автор урока подчеркнул, что сериализация может быть проблемной с OS "Android" и "IOS"... Как быть тогда? Мне желательно не громоздкий способ, но чтобы сохранял всё вышеперечисленное.
  • Вопрос задан
  • 1955 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos Куратор тега Unity
Берете все данные, которые вам нужно сохранить, загоняете в json/xml, и сохраняете в PlayerPrefs как строку.
Для оптимизации можете подробить на логические элементы.
Ответ написан
Комментировать
shai_hulud
@shai_hulud
Создайте свою структуру классов/списков итд для сохранения мира из обычных C# классов с публичными свойствами и и публичными пустыми конструкторами. Сохраните все свои данные в эту структуру и сериализуйте в файл. Для сериализации выберите любой из предоставленных ассетов для бинарных форматов и скормите ему ваши классы/списки:
https://assetstore.unity.com/search?q=bson или
https://assetstore.unity.com/search?q=messagepack
Хотя на самом деле JSON местами компактнее BSON, и его тоже можно использовать. JSON.NET неплох. Если нужна мультиплатформа то вот JSON & MessagePack работает везде.

Для того что бы выбрать папку для сохранения можно воспользоваться следующим кодом:
#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN || UNITY_WP8
var appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
#else
var appData = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
#endif


Для создания файла в этой папке можно использовать следующий код:
using(var writer = File.CreateText(Path.Combine(appData , "mysave.json")) {


Для непосредственного сохранения в файл с Json.NET:
var serializer = new JsonSerializer();
serializer.Serialize(writer, myData)


Ну, и совет напоследок, не сохранять каждый раз в один и тот же файл, а делать это последовательно в разные файлы, на случай "битого" сохранения.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы