Android

Юнити разработка игры

Подскажите какой способ сохранения подойдёт под телефоны? Если можно напишите код
Dolidze Alexander
Dolidze Alexander
148
при помощи стандартного PlayerPrefs https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
SK
Sher Khan
22 714
Лучший ответ
Есть много способов сохранения данных в Unity для мобильных устройств. Два наиболее часто используемых способа - это PlayerPrefs и сериализация данных в файл.

1. PlayerPrefs - это простой способ хранения небольших объемов данных в формате ключ-значение. Он подходит для сохранения простых игровых данных, таких как рекорды, опции настроек и т.д. Однако он не подходит для сложных данных или большого объема данных, и его использование может замедлить работу игры на мобильных устройствах.

Пример кода для сохранения и загрузки данных с помощью PlayerPrefs:
 // Сохранение данных 
int score = 100;
PlayerPrefs.SetInt("Score", score);
PlayerPrefs.Save(); // Не забывайте вызывать Save, чтобы убедиться, что данные сохранены

// Загрузка данных
if (PlayerPrefs.HasKey("Score")) {
int loadedScore = PlayerPrefs.GetInt("Score");
Debug.Log("Loaded score: " + loadedScore);
} else {
Debug.Log("No saved score found");
}
2. Сериализация данных в файл - это более сложный, но и более гибкий способ сохранения данных. С его помощью можно сохранять сложные структуры данных, такие как списки и словари.

Пример кода для сохранения и загрузки данных с помощью сериализации:
 using System.IO; 
using System.Runtime.Serialization.Formatters.Binary;

// Ваш класс данных должен быть помечен как [Serializable]
[Serializable]
public class GameData {
public int score;
public string playerName;
}

// Сохранение данных
GameData data = new GameData();
data.score = 100;
data.playerName = "Player1";

BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/gameData.dat");
bf.Serialize(file, data);
file.Close();

// Загрузка данных
if (File.Exists(Application.persistentDataPath + "/gameData.dat")) {
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/gameData.dat", FileMode.Open);
GameData loadedData = (GameData)bf.Deserialize(file);
file.Close();

Debug.Log("Loaded score: " + loadedData.score);
Debug.Log("Loaded player name: " + loadedData.playerName);
} else {
Debug.Log("No saved data found");
}
Важно помнить, что при работе с файлами на мобильных устройствах могут быть особые требования к разрешениям, поэтому убедитесь, что ваше приложение имеет соответствующие разрешения для чтения и записи файлов.