zoukankan      html  css  js  c++  java
  • Unity Json文件的读取与写入

    主要是用Json文件保存场景内物体的位置名称等信息,并且用的时候需要读取。其实unity本身好像就有相关API,但是我做的还是需要用到LitJson.dll

    1、创建需要保存的类

    public class EachModel
    {
        public string ModelName;
        public string FileSize;
        public string FileName;
        public string PicName;
        public string[] Pos;
        public string[] Roate;
        public string[] Scale;
        public EachModel()
        {
            Pos = new string[3];
            Roate = new string[4];
            Scale = new string[3];
        }
        public EachModel(string ModelName, string FileName, string PicName, string[] Pos, string[] Roate, string[] Scale)
        {
            this.ModelName = ModelName;
            this.FileName = FileName;
            this.PicName = PicName;
            for (int i = 0; i < Pos.Length; i++)
            {
                this.Pos[i] = Pos[i];
                this.Roate[i] = Roate[i];
                this.Scale[i] = Scale[i];
            }
            this.Roate[3] = Roate[3];
        }
    }
    

     以及类的集合

    public class ModelList
    {
        public List<EachModel> sites = new List<EachModel>();
    }
    

    2、将ModelList中sites内容转化成Json文件写入,在StreamingAssets文件夹里创建Config文件夹作为Json文件路径

    private void SaveModels(Transform model)
        {
    
            ModelList r = new ModelList();
            EachModel myModel = new EachModel();
            myModel.Pos = new string[] { model.position.x.ToString("f2"), model.position.y.ToString("f2"), model.position.z.ToString("f2") };
            myModel.Roate = new string[] { model.rotation.x.ToString("f2"), model.rotation.y.ToString("f2"), model.rotation.z.ToString("f2"), model.rotation.w.ToString("f2") };
            myModel.Scale = new string[] { model.localScale.x.ToString("f2"), model.localScale.y.ToString("f2"), model.localScale.z.ToString("f2") };
    
    
            //判断config文件是否存在,如果存在就读取Json里的内容来更新site
            if (File.Exists(configPath))
            {
                StreamReader streamreader = new StreamReader(Application.streamingAssetsPath + "/Config/JsonModel.json");//读取数据,转换成数据流
                JsonReader js = new JsonReader(streamreader);//再转换成json数据
                r = JsonMapper.ToObject<ModelList>(js);//读取
                if (IsAdd)
                {
                    r.sites.Add(myModel);
                }
                else
                {
                    for (int i = 0; i < r.sites.Count; i++)
                    {
                        if (r.sites[i].FileName.Equals(fileName.text))
                        {
                            r.sites[i] = myModel;
                            break;
                        }
                    }
                }
                streamreader.Close();
                streamreader.Dispose();
            }
            else
            {
                r.sites.Add(myModel);
            }
            //找到当前路径
            FileInfo file = new FileInfo(configPath);
            //判断有没有文件,有则打开文件,,没有创建后打开文件
            StreamWriter sw = file.CreateText();
            string json = JsonMapper.ToJson(r);
            //避免中文乱码
            Regex reg = new Regex(@"(?i)\[uU]([0-9a-f]{4})");
            json = reg.Replace(json, delegate (Match m) { return ((char)System.Convert.ToInt32(m.Groups[1].Value, 16)).ToString(); });
    
            //将转换好的字符串存进文件,
            sw.WriteLine(json);
            //注意释放资源
            sw.Close();
            sw.Dispose();
        }
    

      

     

    3、写入Json的时候已经有读取Json的操作了,如果只是读取:

     private ModelList modelDatalList = new ModelList();
        private void UpdateData()
        {
            string path = Application.streamingAssetsPath + "/Config/JsonModel.json";
            if (!File.Exists(path))
            {
                return;
            }
            StreamReader streamreader = new StreamReader(Application.streamingAssetsPath + "/Config/JsonModel.json");//读取数据,转换成数据流
            JsonReader js = new JsonReader(streamreader);//再转换成json数据
            modelDatalList = JsonMapper.ToObject<ModelList>(js);//读取
            streamreader.Close();
            streamreader.Dispose();
        }
    

      把Json内容转化成ModelList类,输出modelDatalList.sites即可

  • 相关阅读:
    UVA-1623 Enter The Dragon (贪心)
    UVA-1619 Feel Good (单调队列)
    UVA-11536 Smallest Sub-Array
    UVA-1617 Laptop (贪心)
    UVA-10570 Meeting with Aliens (枚举+贪心)
    UVA-1153 Keep the Customer Satisfied (贪心)
    UVA-1614 Hell on the Markets(贪心+推理) (有待补充)
    UVA-1613 K-Graph Oddity (着色问题)
    UVA-1612 Guess (贪心)
    todo:open和fopen的区别
  • 原文地址:https://www.cnblogs.com/chenxiya/p/14208055.html
Copyright © 2011-2022 走看看