Unity移动端本地保存数据

其实电脑和手机端都可以保存数据的,我这是采用二进制的方法保存,浏览文档里面的内容可能就比较麻烦了

第一步:数据类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

[Serializable]
public class GameDate
{
    //这个类是获取数据和传递数据的
    private bool isFirstGame;

    public void SetIsFirstGame(bool isFirstGame)
    {
        this.isFirstGame = isFirstGame;
    }

    public bool GetIsFirstGame()
    {
        return isFirstGame;
    }
}

第二步:存档和读取类

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
using UnityEngine.UI;

//挂载GamInfomation上
public class GameInfomation : MonoBehaviour
{
    public static GameInfomation _Instance;
    private GameDate date;
    private bool isFirstGame;
    private void Awake()
    {
        _Instance = this;
    }

    private void Start()
    {
        InitGameDate();
      
    }



    //初始化数据
    private void InitGameDate()
    {
        //第一步读取数据
        Read();
        if (date != null)
        {
            //至少读取过一次
            isFirstGame = date.GetIsFirstGame();
        }
        else
        {
            isFirstGame = true;
        }

        //如果是第一次游戏
        if(isFirstGame)
        {
            Debug.Log("是第一次读取");
            //开始创建文件
            date = new GameDate();
            isFirstGame = false;
            //保存数据
            Save();          
        }
        else
        {
            Debug.Log("不是第一次读取");
            //不是第一次游戏就设置其他信息
        }

    }

    public void Save()
    {
        try
        {
            BinaryFormatter bf = new BinaryFormatter();
            using (FileStream fs = File.Create(Application.persistentDataPath + "/GameData.data"))
            {
                //保存数据

                date.SetIsFirstGame(isFirstGame);
                bf.Serialize(fs, date);
            }
        }
        catch (System.Exception e)
        {

            Debug.Log("失败创建" + e.Message);
        }
    }

    private void Read()
    {
        try
        {
            BinaryFormatter bf = new BinaryFormatter();
            using (FileStream fs = File.Open(Application.persistentDataPath + "/GameData.data", FileMode.Open))
            {
                date =(GameDate)bf.Deserialize(fs);
            }
        }
        catch(Exception e)
        {
            Debug.Log(e.Message);
        }
    }
}

那么储存和读取文档的操作就结束了,为了方便测试,所以快速定位文档也是有必要的,用编译器扩展就很方便了

using UnityEngine;
using UnityEditor;

public class FindData : MonoBehaviour
{
    [MenuItem("Assets/Open PersistentDataPath")]
    // Start is called before the first frame update
    static void Open()
    {
        EditorUtility.RevealInFinder(Application.persistentDataPath);
    }
}

接下来看下输出结果吧

第一次运行读取结果

第二次运行读取结果

当然在用户切到后台保存文件就比较合适了

 private void OnApplicationPause(bool isFocs)
    {
        //如果切换到后台
        if (isFocs)
        {
            Save();
        }
    }

 

 

你可能感兴趣的:(Unity)