但我听说这种方式有一些问题,不适合储蓄。

没错。在某些设备上,存在一些问题BinaryFormatter..当您更新或更改类时,情况会变得更糟。由于类不再匹配,您的旧设置可能会丢失。有时,由于这个原因,在读取保存的数据时会出现异常。

另外,在IOS上,您必须添加Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");否则你会有问题的BinaryFormatter.

保存的最好方法是用PlayerPrefs和Json..你可以学会怎么做这里.在我的例子中,保存格式必须是字节数组。

在本例中,您可以将其转换为json,然后转换json。string到byte阵列。然后你可以用File.WriteAllBytes和File.ReadAllBytes若要保存和读取字节数组,请执行以下操作。

下面是一个可以用来保存数据的泛型类。几乎和.一样这,这个但它确实不使用PlayerPrefs..它使用文件保存json数据。

DataSaver班级:public class DataSaver{

//Save Data

public static void saveData(T dataToSave, string dataFileName)

{

string tempPath = Path.Combine(Application.persistentDataPath, "data");

tempPath = Path.Combine(tempPath, dataFileName + ".txt");

//Convert To Json then to bytes

string jsonData = JsonUtility.ToJson(dataToSave, true);

byte[] jsonByte = Encoding.ASCII.GetBytes(jsonData);

//Create Directory if it does not exist

if (!Directory.Exists(Path.GetDirectoryName(tempPath)))

{

Directory.CreateDirectory(Path.GetDirectoryName(tempPath));

}

//Debug.Log(path);

try

{

File.WriteAllBytes(tempPath, jsonByte);

Debug.Log("Saved Data to: " + tempPath.Replace("/", "\\"));

}

catch (Exception e)

{

Debug.LogWarning("Failed To PlayerInfo Data to: " + tempPath.Replace("/", "\\"));

Debug.LogWarning("Error: " + e.Message);

}

}

//Load Data

public static T loadData(string dataFileName)

{

string tempPath = Path.Combine(Application.persistentDataPath, "data");

tempPath = Path.Combine(tempPath, dataFileName + ".txt");

//Exit if Directory or File does not exist

if (!Directory.Exists(Path.GetDirectoryName(tempPath)))

{

Debug.LogWarning("Directory does not exist");

return default(T);

}

if (!File.Exists(tempPath))

{

Debug.Log("File does not exist");

return default(T);

}

//Load saved Json

byte[] jsonByte = null;

try

{

jsonByte = File.ReadAllBytes(tempPath);

Debug.Log("Loaded Data from: " + tempPath.Replace("/", "\\"));

}

catch (Exception e)

{

Debug.LogWarning("Failed To Load Data from: " + tempPath.Replace("/", "\\"));

Debug.LogWarning("Error: " + e.Message);

}

//Convert to json string

string jsonData = Encoding.ASCII.GetString(jsonByte);

//Convert to Object

object resultValue = JsonUtility.FromJson(jsonData);

return (T)Convert.ChangeType(resultValue, typeof(T));

}

public static bool deleteData(string dataFileName)

{

bool success = false;

//Load Data

string tempPath = Path.Combine(Application.persistentDataPath, "data");

tempPath = Path.Combine(tempPath, dataFileName + ".txt");

//Exit if Directory or File does not exist

if (!Directory.Exists(Path.GetDirectoryName(tempPath)))

{

Debug.LogWarning("Directory does not exist");

return false;

}

if (!File.Exists(tempPath))

{

Debug.Log("File does not exist");

return false;

}

try

{

File.Delete(tempPath);

Debug.Log("Data deleted from: " + tempPath.Replace("/", "\\"));

success = true;

}

catch (Exception e)

{

Debug.LogWarning("Failed To Delete Data: " + e.Message);

}

return success;

}}

使用:

要保存的示例类:[Serializable]public class PlayerInfo{

public List ID = new List();

public List Amounts = new List();

public int life = 0;

public float highScore = 0;}

保存数据:PlayerInfo saveData = new PlayerInfo();saveData.life = 99;saveData.highScore = 40;

//Save data from PlayerInfo to a file named playersDataSaver.saveData(saveData, "players");

负载数据:PlayerInfo loadedData = DataSaver.loadData("players");if (loadedData == null){

return;}//Display loaded DataDebug.Log("Life: " + loadedData.life);

Debug.Log("High Score: " + loadedData.highScore);for (int i = 0; i

Debug.Log("ID: " + loadedData.ID[i]);}for (int i = 0; i

Debug.Log("Amounts: " + loadedData.Amounts[i]);}

删除数据:DataSaver.deleteData("players");

在java保存游戏状态_保存游戏状态的最佳方法是什么?相关推荐

  1. Java计算器按钮间隔_获得声音按钮的最佳方法按Java计算器?

    我是一名学习Java的学生,正在为我的简历工作一个独立的项目.我决定做一个Java计算器,因为我知道构成它的大多数组件.我不知道怎么做的一件事是按下按钮添加声音.对于Audiostream输入内容,我 ...

  2. Java 丢手绢游戏 求和_大班游戏活动_丢手绢

    本育儿文章是育儿天堂最新发布的<大班游戏活动_丢手绢>的详细页面,觉得有用就收藏了,这里给大家转摘到育儿天堂,看完如果觉得有用请记得收藏. 大班游戏运动:丢手绢 滨州市滨城区杨柳雪镇教诲尝 ...

  3. java东风破笑傲江湖游戏下载_笑傲江湖游戏

    为您推荐:dos游戏 笑傲江湖(DOS)是一款经典的武侠游戏作品,游戏通过完美移植金庸小说的内容,用突出的DOS系统3D效果,为玩家重新讲述一遍经典的武侠故事,笑傲江湖(DOS)虽然游戏题材固定,游戏 ...

  4. 最好玩的计算机游戏排行,电脑十大耐玩单机游戏-pc上最好玩的单机游戏-pc好玩的单机游戏排行_侠游戏网...

    说到端游单机游戏,最近也推出一些,不过也不多.下面就推荐我自己玩过的单机游戏给大家吧,希望你们能找到适合自己的单机游戏. 一.GTA5 这被玩家成为神作之游,游戏好玩程度非常的高,可以玩上好几年,因为 ...

  5. 服务器查看gpu状态_服务器 201 状态

    生产环境常见的HTTP状态码列表 生产环境常见的HTTP状态码列表(List of HTTP status codes) 说明:求精不求多,有舍才有得 不一样的思维不一样的精彩. 200 - OK,服 ...

  6. java enum 2d array,Java-打印2D数组的最佳方法?

    Java-打印2D数组的最佳方法? 我想知道打印2D阵列的最佳方法是什么. 这是我的一些代码,我只是想知道这是否是一种好习惯. 如果发现任何其他错误,请更正我在此代码中犯的任何其他错误. 谢谢! in ...

  7. 如何实现JAVA游戏存档_保存游戏数据 – Java

    Should I be learning XML in tandem with Java? 除非您想学习XML或认为XML是您的应用程序的一个很好的选择,否则没有理由.有许多方法可以在没有XML的情况 ...

  8. java 贪吃蛇 控制台_控制台游戏贪吃蛇Java版

    无心间看到的一个贪吃蛇的控制台小游戏,起初只是想copy下来玩玩,没想里面有不少小问题,就顺手解决,固然仍是不完美,可是也勉强能玩了.java import java.util.LinkedList; ...

  9. java猜拳游戏代码_猜拳游戏 - java代码库 - 云代码

    [java]代码库public class Computer { String name; int score; public int showfist(){ int quan; quan=(int) ...

最新文章

  1. Zabbix使用JMX监控tomcat
  2. mysql函数快速查找
  3. java开启线程的方法_Java有几种方法开启线程?怎么实现带有返回值的线程?
  4. 国内企业应如何实施ITSM
  5. MFC(六)(对话框)
  6. 分享《组播技术白皮书》
  7. Mac下使用gitHub
  8. 声明 styleable 与声明 attr 的区别
  9. 160304-01、mysql数据库插入速度和读取速度的调整记录
  10. Android学习路(正在写)
  11. 【Unity游戏开发】Unity基础(一)面板介绍
  12. 一般线性模型混合线性模型广义线性模型【转】
  13. 常见的DoS攻击防御方式
  14. iframe是什么?iframe用法详解
  15. 看完淘宝技术这十年思考
  16. 世界名车各种图标及文字说明
  17. java excel checkbox_在Java窗体表格中插入复选框
  18. 计算机无法备份,win7不能备份系统如何解决?win7不能备份系统的解决方法
  19. 计算机二级vb考试怎么准备,计算机二级考试内容是什么 各科目该怎么准备
  20. 赤壁之战的Google Map

热门文章

  1. android 项目 功能 源码 eclipse的
  2. swith 好久不用都忘记了
  3. SpringMVC请求后台地址URL没有.*的几种实现方式
  4. 微软MCITP系列课程(十)WSUS服务器搭建
  5. DOMContentLoaded事件
  6. protoc 命令 java_用proto命令生成java文件
  7. 专科学院计算机专业全国排名,2019年专科专业排行_2019世界大学排名 计算机专业...
  8. springboot日志可视化_Springboot面试问题集锦
  9. 必须用Python给程序员不懂浪漫平反一波....不管班花还是校花全都跑不掉~
  10. 求两条轨迹间的hausdorff距离_干货 | 轨迹方程问题?两招咔嚓!