• Unity的Json解析<二>–写Json文件


    本文章由cartzhang编写,转载请注明出处。 所有权利保留。
    文章链接:http://blog.csdn.net/cartzhang/article/details/50378805
    作者:cartzhang

    Unity的Json解析<二>–写Json文件

    上篇做了对Json格式文件读操作,
    链接地址:http://blog.csdn.net/cartzhang/article/details/50373558

    本章对Json的写文件,做个处理.
    写文件也非常简单,把大象装冰箱一样,分三步,
    创建文件,
    把内容写入文件,
    然后关闭文件.

    内容

    我们要处理的是所写的内容,我们打算写什么都Json文件中呢?
    我们打算把昨天的格式继续利用,还记得GameStatus ,这个是我修改的.不过,还算好用啊.
    GameStatus.cs文件代码如下:

    using UnityEngine;
    using System;
    using System.Collections;
    
    [Serializable]
    public class GameStatus
    {
        public string gameName;
        public string version;
        public bool isStereo;
        public bool isUseHardWare;
        public refencenes[] statusList;
    }
    
    [Serializable]
    public class refencenes
    {
        public refencenes()
        {
            name = "";
            id = -1;
        }
    
        public string name;
        public int id;
    }
    
    

    写Json格式

    写JSon格式呢,我看网上都用的BinaryFormatter来处理,但是我发现这个跟昨天的问题类型,要是用BinaryFormatter的话,等保存好的Json文本打开后,各种空格,NULL和乱码.这个主要是编码格式的问题.
    所以,我拒绝使用它了.

    我使用File,直接WriteALLText来处理.

    代码如下:

        public void SaveJson()
        {
            string json = JsonUtility.ToJson(gameStatus);
            string savePath = Application.dataPath + "/Resources/Test01.json";
            File.WriteAllText(savePath, json, Encoding.UTF8);        
    
            Debug.Log("save:::" + savePath);
        }

    这样就完成了写文件是否很简便呢??!!!

    写Json的完整代码

    完整代码如下:

    using UnityEngine;
    using System.Collections;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;
    
    public class WriteJson : MonoBehaviour
    {
        public GameStatus gameStatus;
        public GameObject[] objects;
        void Start()
        {
            gameStatus = new GameStatus();
            gameStatus.statusList = new refencenes[objects.Length];
            gameStatus.gameName = "JSON Write Test";
    
            for (int i = 0; i < objects.Length; i++)
            {
                gameStatus.statusList[i] = new refencenes(); 
                gameStatus.statusList[i].id = i;
                gameStatus.statusList[i].name = objects[i].name;
            }
        }
    
        public void SaveJson()
        {
            string json = JsonUtility.ToJson(gameStatus);
            string savePath = Application.dataPath + "/Resources/Test01.json";
            File.WriteAllText(savePath, json, Encoding.UTF8);        
    
            Debug.Log("save:::" + savePath);
        }
    }
    

    怎么使用?

    我建立了一个测试工程.
    只能如图了:
    Json读

    你依然可以看到昨天写文件的痕迹.

    当然我们只关注写Json了.

    在writeJson的属性面板上,可看到,给它的Objects拖拽了一个cube,一个Capsule,作为保存到JSon文件中的内容的一部分.

    然后在运行Unity 编辑器时,按下”S”,保存键,就会在当前工程下的AssetsResources中,产生了一个Test01.json的文件,这个代码中可以看到的,你可随意修改.

    结果

    让我们来看看我们都保持都Json文件中了什么东西.

    {"gameName":"JSON Write Test","version":"","isStereo":true,"isUseHardWare":false,"statusList":[{"name":"Cube","id":0},{"name":"Capsule","id":1}]}

    这就是你所保存的Json文件中的内容.


    我打算上传都github,但是现在我github一直让更新,更新不成功,打不开啊!

    留下地方吧!!

    github一大早来更新,终于更新成功。
    **
    所以,源码地址:https://github.com/cartzhang/UnityJsonTest

    快捷到达源码:Unity Json Test for 5.3

    **

    至此,Json文件的读写都搞定了.

    更多

    关于Json文件的使用,我打算尝试一个,能不能做个更好的配置,比如控制游戏的场景配置和游戏流程.打包后面不用修改,直接修改json 就可以创建一个完全不一样的游戏了.
    这样,是不是比较蠢呢!!可能会,比较复杂吧!!
    只个想法,若有兴趣,看看能不能实现一下.

    ———THE—–END————————–
    若有问题,请随时联系!!
    非常感谢!!!

  • 相关阅读:
    interbase C++Builder 简单例子
    delphi代码实现创建dump文件
    在Mac OSX下使用ssh建立隧道(在Windows下建立隧道可以使用putty,其间会用到ppk文件)
    为什么豌豆荚们没能成为伟大的公司?
    解读雷军演讲,小米能否借“科技业的无印良品”反弹?(坚硬和纯洁的心,才能把这个事情干好)
    SOCKET网络编程5
    SQL Server 跨网段(跨机房)复制
    Erlang千万级用户游戏框架(Openpoker)源码文件分析清单
    异步编程
    代码性能不高
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461932.html
Copyright © 2020-2023  润新知