栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

【Unity代码】使用txt文件保存和读取游戏数据

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Unity代码】使用txt文件保存和读取游戏数据

使用二进制存储数据 1.创建需要存取的数据类:
 	public class SaveData
    {
        public int i = 11;
        public string str = "save";
    }
    
	SaveData data = new SaveData();
	data.i = 12;
	data.str = "ccc";
2.获取数据存取路径Application.persistentDataPath

官方文档:https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html

此值是一个目录路径,您可以在其中存储要在运行之间保留的数据。在 iOS 和 Android 上发布时,persistentDataPath 指向设备上的公共目录。此位置中的文件不会被应用更新删除。用户仍然可以直接删除这些文件。

构建 Unity 应用程序时,会生成一个基于 Bundle Identifier 的 GUID。此 GUID 是 persistentDataPath 的一部分。如果您在以后的版本中保留相同的 Bundle Identifier,则应用程序会在每次更新时访问相同的位置。

3.创建数据存取文件夹

判断文件夹是否存在,不存在则创建。
引用空间:using System.IO;

 	if (!Directory.Exists(Application.persistentDataPath + "/game_Save"))
    {
        Directory.CreateDirectory(Application.persistentDataPath + "/game_Save");
    }
4.创建BinaryFormatter对象,以二进制序列化对象

引用空间:System.Runtime.Serialization.Formatters.Binary

 BinaryFormatter fomatter = new BinaryFormatter();

储存数据方法:Serialize(FileStream, Data):将指定的流 序列化 成对象(二进制)
取出数据方法:Deserialize(FileStream):将指定的流(二进制) 反序列化 成对象

4.创建文件流FileStream
FileStream file = File.Create(Application.persistentDataPath + "/game_Save/data.txt");
5.将对象转换成Json后,以二进制序列化,放入文件流
fomatter.Serialize(file,JsonUtility.ToJson(data));
6.别忘了关闭文件流
file.Close();
全部代码
 	public class SaveData
    {
        public int i;
        public string str;
    }
	public SaveData data = new SaveData();
    public void SavaBinary()
    {
        data.i = 12;
        data.str = "ccc";

        if (!Directory.Exists(Application.persistentDataPath + "/game_Save"))
        {
            Directory.CreateDirectory(Application.persistentDataPath + "/game_Save");
        }
        BinaryFormatter fomatter = new BinaryFormatter();
        FileStream file = File.Create(Application.persistentDataPath + "/game_Save/data.txt");
        fomatter.Serialize(file,JsonUtility.ToJson(data));
        file.Close();
    }
使用二进制读取数据

判断文件是否存在,若存在则得到文件流,再将这二进制的文件流,反序列化为string字符串,再进一步转化为对象。

		BinaryFormatter bf = new BinaryFormatter();
        if (File.Exists(Application.persistentDataPath + "/game_Save/data.txt"))
        {
            FileStream file = File.Open(Application.persistentDataPath + "/game_Save/data.txt", FileMode.Open);
            JsonUtility.FromJsonOverwrite((string)bf.Deserialize(file), data);
        }
全部代码:
   public void LoadBinary()
    {
        BinaryFormatter bf = new BinaryFormatter();
        if (File.Exists(Application.persistentDataPath + "/game_Save/data.txt"))
        {
            FileStream file = File.Open(Application.persistentDataPath + "/game_Save/data.txt", FileMode.Open);
            JsonUtility.FromJsonOverwrite((string)bf.Deserialize(file), data);
        }
    }
直接使用Json存储

直接使用json存储,这不需要使用二进制转换类,直接使用FileStream的Write方法即可,其余步骤和上面一致。
不过将json字符串转换为byte数组。

	byte[] byteArray = System.Text.Encoding.Default.GetBytes(json);
	file.Write(byteArray,0, byteArray.Length);
全部代码:
    public void SaveJson()
    {
        Debug.Log(Application.persistentDataPath);
        if (!Directory.Exists(Application.persistentDataPath + "/game_Save"))
        {
            Directory.CreateDirectory(Application.persistentDataPath + "/game_Save");
        }
        data.i = 12;
        data.str = "ccc";
        FileStream file = File.Create(Application.persistentDataPath + "/game_Save/dataJson.json");
        string json = JsonUtility.ToJson(data);
        byte[] byteArray = System.Text.Encoding.Default.GetBytes(json);
        file.Write(byteArray,0, byteArray.Length);
        
        file.Close();
    }
直接使用Json读取

和二进制不同,不需要二进制转换类。需要使用byte数组和Encoding.UTF8.GetString转换。

 		byte[] bytes = new byte[file.Length];
        int r = file.Read(bytes, 0, bytes.Length);
        string json = Encoding.UTF8.GetString(bytes, 0, r);
全部代码:
    public void LoadJson()
    {
        if (File.Exists(Application.persistentDataPath + "/game_Save/dataJson.json"))
        {
            FileStream file = File.Open(Application.persistentDataPath + "/game_Save/dataJson.json", FileMode.Open);
            byte[] bytes = new byte[file.Length];
            int r = file.Read(bytes, 0, bytes.Length);
            string json = Encoding.UTF8.GetString(bytes, 0, r);
            Debug.Log(json);
            JsonUtility.FromJsonOverwrite(json, data);
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901599.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号