• Unity3d数据存储 PlayerPrefs,XML,Json数据的存储与解析


    今天来复习一下数据存储方面的基础知识,Unity3d中常用的数据存储方式有Unity自带的PlayerPrefs, XML文档, Json文档,还有常用的轻量级数据库SQL, 涉及的琐碎知识非常多,在这里自己归纳总结一下,方便日后温故而知新.

    PlayerPrefs存储数据

    PlayerPrefs的存储方式非常简单,但可用性不强,一般只用于调试过程存储少量数据,很少大范围使用

    适用设备:Mac OSX, Linux, Windows,Web Players 

    存储机制:Key-Value (类似于字典的键值对,通过键值索引到相应数据)

    可存储变量类型: int, float, string 

    常用方法: SetFloat     存储float 类型的数据                 GetFloat        获取float 类型的数据

                     SetInt         存储Int类型的数据                     GetInt            获取Int 类型的数据

                     SetString    存储string 类型的数据               GetString      获取string 类型的数据

                     DeleteAll     删除所有PlayerPrefs数据          HasKey        判断是否存在该Key值的数据

    简单代码示例如下,是不是很简单?

    void ExamplePlayerPrefs()
    {
        PlayerPrefs.SetFloat("PlayerScore", 10f);
        Debug.Log(PlayerPrefs.GetFloat("PlayerScore"));
    }

    XML的存储与解析

    (1)XMl常用类及其常用属性和方法

    XmlNode 

    InnerText                           获取或设置节点及其所有子节点的值(仅元素节点拥有)

    Value                                 获取或设置节点的值(仅属性节点拥有)

    AppendChild                      将指定的节点添加到该节点的子节点列表的末尾

    ChildNodes                        获取节点的所有子节点

    FirestChild                        

    XmlDocument

    CreateXmlDeclaration       创建一个具有指定值的XmlDeclaration节点

    CreateElement                   创建具有指定名称的元素

    CreateNode                       创建具有指定的节点类型的XmlNode

    AppendChild                      将指定节点添加到末尾(继承自XmlNode)

    Save                                  将Xml文档保存到指定的文件

    Load                                  从指定的URL加载Xml文档

    LoadXml                            从指定的字符串加载Xml文档

    XmlElement

    SetAttribute                       设置具有指定名称的特性的值

    HasAttributes                    判断该元素节点是否具有属性

    GetAttribute                       返回具有指定名称的属性值

    (2)XML数据的生成步骤

    在Unity引擎中如何生成本地XML数据?

    第一步:引入C#的命名空间 System.Xml

    第二步:生成XML文档(XmlDocument类)

    第三步: 生成根元素(XmlElement类) 添加给文档对象

    第四步:循环生成子元素添加给父元素

    第五步:将生成的XML文档保存

    (3)XML解析步骤

    在解析时注意, 需要根据Xml文件的结构创建好对应的数据模型,去接受解析出来的数据!!! 

    Json的存储与解析

    Json一般使用两个类库,一个System.Json(便于Json生成),一个是LitJson(便于Json解析)

    Json生成

    void LitCtreatJson()
        {   
            JsonData hero = new JsonData();
            hero["HeroName"] = "诺克萨斯";
            hero["Hp"] = 100;
            hero["attack"] = 40;
            hero["Skills"] = new JsonData();
    
            JsonData skill1 = new JsonData();
            skill1["KeyCode"] = "Q";
            skill1["Name"] = "大杀四方";
            skill1["Mp"] = 20;
            skill1["cd"] = 8;
            hero["Skills"].Add(skill1);
    
            JsonData skill2 = new JsonData();
            skill2["KeyCode"] = "W";
            skill2["Name"] = "致残打击";
            skill2["Mp"] = 40;
            skill2["cd"] = 5;
            hero["Skills"].Add(skill2);
    
            JsonData skill3 = new JsonData();
            skill3["KeyCode"] = "E";
            skill3["Name"] = "无情铁手";
            skill3["Mp"] = 10;
            skill3["cd"] = 9;
            hero["Skills"].Add(skill3);
            JsonData skill4 = new JsonData();
            skill4["KeyCode"] = "R";
            skill4["Name"] = "诺克萨斯断头台";
            skill4["Mp"] = 120;
            skill4["cd"] = 60;
            hero["Skills"].Add(skill4);
        }

    Json解析

     void LitParseJson()
        {
            FileInfo file =new FileInfo(Application.dataPath + "/LoL.json");
            StreamReader sr = new StreamReader(file.OpenRead(), Encoding.UTF8);
            string content = sr.ReadToEnd();
            JsonData data= JsonMapper.ToObject(content);
            foreach (JsonData item in data["Skills"])
            {
                print(item["name"]);
            }
            Hero hero;
            hero =  JsonUtility.FromJson<Hero>(content);
            sr.Close();
            sr.Dispose();
        }
  • 相关阅读:
    Golang 需要避免踩的 50 个坑(二)
    Golang 需要避免踩的 50 个坑1
    Golang两种执行流程以及区别
    go安装配置
    h5表单亲测
    HTML5-表单 自带验证
    后台日志实现
    jQuery Validate验证框架详解,提交前验证
    用cProfile做性能分析【转】
    tmux 如何翻页
  • 原文地址:https://www.cnblogs.com/dabaimifan/p/7220428.html
Copyright © 2020-2023  润新知