首页 > Unity > Unity 转微信小游戏存储进度丢失问题
2024
09-12

Unity 转微信小游戏存储进度丢失问题

最近老金在准备发布微信小游戏的事,发现Unity工程转出来的微信小游戏有一个问题,每次重启小游戏时,游戏的进度就丢失了,查了一圈才发现,原来是在微信小游戏平台上,使用Application.persistentDataPath缓存路径来保存文件失败了。

原来代码是这样的

        //读取存档
        public static GameData LoadGame(int sceneId)
        {
            string path = $"{Application.persistentDataPath}/GameData_{sceneId}.dat";
            //检测是否存在存档,若存在则读取存档
            if (File.Exists(path))
            {
                BinaryFormatter bf = new BinaryFormatter();
                FileStream file = File.Open(path, FileMode.Open);
                Global_GameData data = (Global_GameData)bf.Deserialize(file);
                file.Close();
                return data;
            }
            return null;
        }

        //创建或覆盖存档
        public static void SaveGame(GameData data)
        {
            //设置储存路径并储存
            string Save_Path = $"{Application.persistentDataPath}/GameData_{data.SceneId}.dat";
            BinaryFormatter bf = new BinaryFormatter();
            FileStream file = File.Create(Save_Path);
            bf.Serialize(file, data);
            file.Close();
        }

除了Application.persistentDataPath缓存路径要改,还要用微信小游戏SDK的读写文件接口进行改造。修改之后的代码是这样的

          public static GameData LoadGame(int sceneId)
	  {
                     WXFileSystemManager fs = WX.GetFileSystemManager();

                        string path = $"{WX.env.USER_DATA_PATH}/GameData_{sceneId}.dat";
			//检测是否存在存档,若存在则读取存档
			if (fs.AccessSync(path).Equals("access:ok"))
			{
                               byte[] fileData = fs.ReadFileSync(path);

                               MemoryStream memoryStream = new MemoryStream(fileData);
                               BinaryFormatter bf = new BinaryFormatter();
                               Global_GameData data = (Global_GameData)bf.Deserialize(memoryStream);
                               return data;
			}
                        return null;
        }

        public static void SaveGameWechat(Global_GameData data)
		{
                      string savePath = $"{WX.env.USER_DATA_PATH}/GameData_{data.SceneId}.dat";
                      MemoryStream memoryStream = new MemoryStream();
                      BinaryFormatter bf = new BinaryFormatter();
                      bf.Serialize(memoryStream, data);
                      byte[] saveData = memoryStream.ToArray();
                      WXFileSystemManager fs = WX.GetFileSystemManager();
                      fs.WriteFileSync(savePath, saveData);
        }

通过这种修改方式,Unity转出来的工程就能正常在微信小游戏里运行进来了。

最后编辑:
作者:freeman
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据