[独游开发210105]Unity基于LitJson的存档系统

[独游开发210105]Unity基于LitJson的存档系统Unity 基于 LitJson 的存档系统 描述 最近在做自己的第一个游戏 因为之前都是随便玩玩的 所以并不是很深入 昨天看了 LitJson 的数据持久化 今天就试着去做了下 从早上干到现在 虽说代码可能不足 但起码功能实现了 后续再加修改不是大事

大家好,我是讯享网,很高兴认识大家。

Unity基于LitJson的存档系统:


描述:

最近在做自己的第一个游戏,因为之前都是随便玩玩的,所以并不是很深入。昨天看了LitJson的数据持久化,今天就试着去做了下,从早上干到现在,虽说代码可能不足,但起码功能实现了,后续再加修改不是大事。其中我也总结了一些坑。

LitJson的简单使用

  1. 下载一个LitJson.dll,放在Assets/Plugins下
  2. 在脚本中using LitJson
  3. 创建好SL类,来保存需要存储的数据。要序列化[System.Serializable]
  4. SaveObjectToJson存档
 private void SaveObjectToJson() { 
    save.scene = GameManager.getSceneIndex(); save.posX = GameManager.instance.player.transform.position.x; save.posY = GameManager.instance.player.transform.position.y; Debug.Log(save.posX); Debug.Log(save.posY); File.WriteAllText(Application.dataPath + "/Json/sl.json", JsonMapper.ToJson(save)); } 
讯享网
  1. LoadJsonFromFile读档
讯享网 private string LoadJsonFromFile() { 
    return File.ReadAllText(Application.dataPath + "/Json/sl.json"); } 

SL:

主界面

- Start (由Canvas中的MainMenu脚本控制,点击后buildIndex+1) - Load(由GameManager物体(在Hierarchy窗口创建的,里面搭载了GameManager和DataManager脚本)控制,点击后调用DataManager,点击后获取已保存的json文件,转化为自定义类(本篇为SL),后将SL中的数据赋值给GameManager中对应的数据,并最后进行LoadScene)
 public void LoadGame() { 
    load = JsonMapper.ToObject<SL>(LoadJsonFromFile()); GameManager.instance.scene = load.scene; GameManager.instance.pos = new Vector3((float)load.posX, (float)load.posY, 0f); GameManager.changeScene(load); } 

暂停界面

  • Save(由GameManager中的DataManager控制,点击后将GameManager中的相应数据赋值给新定义的SL类的变量save,最后用File.WriteAllTest函数进行保存)。
讯享网 public void SaveGame() { 
    SaveObjectToJson(); } private void SaveObjectToJson() { 
    save.scene = GameManager.getSceneIndex(); save.posX = GameManager.instance.player.transform.position.x; save.posY = GameManager.instance.player.transform.position.y; Debug.Log(save.posX); Debug.Log(save.posY); File.WriteAllText(Application.dataPath + "/Json/sl.json", JsonMapper.ToJson(save)); } 

注意
这几个代码写的不太好,太繁杂,还能优化,大佬们一笑带过就行。


踩了好久的坑

1.代码太杂了,从上面也能看到脚本一堆,我自己实际做的时候也看花了,后续还要看看能不能在整合简化一下。
2.Button下的On Click拖入的最好是为预制体的带脚本的物体,因为这样不用每次加载界面都进行实例化,比如说我在主菜单的button为Hierarchy中的带GameManager的物体,在主菜单加载到场景1后又返回菜单后,主菜单的Button的On Click就为Missing状态。(发现这个问题还是不规范导致的233,我在场景1的On Click放入了为预制体的物体,后来突然想起来这一点,上文所说的问题也就解决了)
3.角色GameObject问题。第一次写脚本时出现一个问题,我将角色实例化放在LoadScene之后,Debug出来GameObject无论如何都是null,最后改了好久没改掉就重写了。重写后我是在PlayerController中在Start中将本身的GameObject赋值给GameManager,这样在加载进入场景1后就可以实例化GameManager中的GameObject,并在GameObject的Update中将角色的实时position传给GameObject中的pos(好家伙,我这是怎么想的,写完就把改了),要保存时赋值就行。

小讯
上一篇 2025-03-20 14:11
下一篇 2025-01-29 07:45

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/41595.html