序列化
先看看序列化的概念:
序列化 就是把一个内存对象变为与地址无关的可传输的数据格式,通常是文本格式;反序列化反之。
所谓的内存对象就是我们游戏运行时,保存在内存中的对象,例如我们在运行时产生的类都是保存在内存中的,序列化就是把这些保存在内存中的数据变成可以传输的文本格式,例如json,xml等等。反序列化则是把json,xml等等的传输文本格式重新转化为内存数据。
改进打飞碟游戏
我之前的打飞碟游戏,所有和场景有关的数据都保存在judge.cs中的Judge类中,然后在GameModel中实例化Judge类,之后所有需要应用到规则的都使用这个实例中的数据。说到这里,我们的改进方案非常简单:将Judge类变成可序列化的类即可。
序列化的格式:
在需要实例化的类上加上[System.Serializable]即可。
测试
我们在Assets中新建一个文件夹Json,在Json文件夹中新建一个judge.json文件,并加入下面的内容:
Vector3在Unity引擎里也是序列化的类型,我们使用嵌套的json可以初始化vector3."flypos" : {"x":-3,"y":-2,"z":-10}
。
修改GameModel
现在我们已经序列化了Judge,以及编写了一个Json文件,我们现在需要做的就是将GameModel中实例化的Judge改成从Json中反序列化。
加入版本号
现在加入一个版本号,用于检测是否需要更新版本。
在Judge类中加入多一个字段:
在界面中加入:
版本号连接的信息:
新版本的详细信息:
最终效果:
更新本地文件
最后我们要做的就是将更新后的信息保存到本地文件,我们使用协程完成这个工作。更新过程中退出会造成文件损坏,所以加一个文字提示更新结束。
效果
更新版本前:
更新版本后:
完整的GameModel和Judge