Для сохранения используются PlayerPrefs
и JsonUtility
.
Класс для хранения данных сцены:
using System;
[Serializable]
public class Data
{
public bool isLoad;//была ли загружена сцена ранее,
//можно использовать для выполнения чего-либо только при первой загрузке сцены
public int sceneId; //id сцены
}
Обработчик сохранения и загрузки:
using System;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class DataLoader
{
public List scenesData = new List();
public void Save(Data savedData)
{
Load();
if(scenesData.Count > savedData.sceneId)
{
scenesData[savedData.sceneId] = savedData;
}
else
{
scenesData.Add(savedData);
}
string value = JsonUtility.ToJson(this);
PlayerPrefs.SetString("data", value);
PlayerPrefs.Save();
}
public void Load()
{
if (PlayerPrefs.HasKey("data"))
{
string value = PlayerPrefs.GetString("data");
DataLoader loader = JsonUtility.FromJson(value);
this.scenesData = loader.scenesData;
}
}
public static void Clear()
{
if (PlayerPrefs.HasKey("data"))
{
PlayerPrefs.DeleteKey("data");
}
}
}
Сохранение и загрузка:
private int sceneIndex = SceneManager.GetActiveScene().buildIndex;
private void LoadGame()
{
DataLoader loader = new DataLoader();
loader.Load();
if (loader.scenesData.Count > sceneIndex)
{
isLoad = loader.scenesData[sceneIndex].isLoad;
}
}
private void SaveGame()
{
Data data = new Data();
data.isLoad = true;
data.sceneId = sceneIndex;
DataLoader loader = new DataLoader();
loader.Save(data);
}
Обновлено: 28.06.2020
Вам помогла эта статья? Оцените!