Сохранение данных и состояния игры в Unity

Для сохранения используются 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

Вам помогла эта статья? Оцените!
(Пока оценок нет)
Загрузка...

Поддержать развитие блога https://www.patreon.com/processby

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *