Unity快捷读取XML、JSON文件

来源:互联网 发布:网络蜘蛛磁力链 编辑:程序博客网 时间:2024/05/17 17:54

看了网上各种读取教程,挺厉害的。但不如我这个封装好的方便,现在我来记录下用法。


首先,下载我这个GameUtils.dll文件,http://download.csdn.net/download/qq_17758883/10018728


把文件复制到Unity工程的Assets目录下的任意文件夹里,Unity会自动编译这个文件。


然后就是脚本了,我来举一个简单的例子。现在我要创建一个任务系统,任务通过读取XML显示在游戏中,那么我们先来看下任务XML文件:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ArrayOfTask1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    <Task1>    <taskID>0</taskID>    <content>制作一杯草莓汁</content>    <isFinished>false</isFinished>  </Task1>    <Task1>    <taskID>1</taskID>    <content>制作一杯橙汁</content>    <isFinished>false</isFinished>  </Task1>  <Task1>    <taskID>2</taskID>    <content>制作一杯芒果汁</content>    <isFinished>false</isFinished>  </Task1>  <Task1>    <taskID>3</taskID>    <content>制作一杯猕猴桃汁</content>    <isFinished>false</isFinished>  </Task1>  <Task1>    <taskID>4</taskID>    <content>制作一杯西瓜汁</content>    <isFinished>false</isFinished>  </Task1>  <Task1>    <taskID>5</taskID>    <content>制作一杯蓝莓汁</content>    <isFinished>false</isFinished>  </Task1>  </ArrayOfTask1>

需要注意的一点是:XML的根标签是ArrayOfTask1,你在使用时注意改成ArrayOf+自己的类名。比如ArrayOfFood、ArrayOfRole等。


再来新建一个Task1类:

using System;using UnityEngine;using System.Collections;[Serializable]public class Task1{    public int taskID;    public string content;    public bool isFinished;
//请忽略这个构造方法    //public Task1(int id, string content)    //{    //    taskID = id;    //    this.content = content;    //    isFinished = false;    //}}


注意:Task1的字段和XML文件里的属性要相对应,而且要添加一个【Serializable】可序列化标签,否则会报错。


接着读取XML的脚本了,很简单,而且能返回一个泛型的List,及其方便我们使用。


using UnityEngine;using System.Collections;using System.Collections.Generic;using UnityGameAssist;public class TaskManager1 : MonoSingletion<TaskManager1>{    /// <summary>    /// 存放当前要执行的任务    /// </summary>    public List<Task1> tasks=new List<Task1>();     /// <summary>    /// 存放所有任务    /// </summary>    public List<Task1> allTask=new List<Task1>();    /// <summary>    /// 发布任务    /// </summary>    public void PublishTask(string type, int taskNum)    {        if (type.Equals("fruit"))        {            //读取水果任务            FileUtils.ReadXml<List<Task1>>("Task", ref allTask, null);        }        else        {            //读取做菜任务            FileUtils.ReadXml<List<Task1>>("FoodTask", ref allTask, null);        }        for (int i = 0; i < taskNum; i++)        {            int temp = Random.Range(0, allTask.Count);            //判断是否包含重复元素,若包含,则i--(有风险,可能会导致生成的实际任务数量,比设定的要多)            if (tasks.Contains(allTask[temp]))            {                if (i >= 0)                    i--;                continue;            }            tasks.Add(allTask[temp]);        }    }

注意看命名空间,要引用UnityGameAssist,然后直接调用FileUtils.ReadXml,第一个参数是你的XML文件名,放在Resources/data/目录下,千万不能放错,不然读取不到。

第二个参数是你的List,第三个参数设为空即可。


Json的读取方式和这个差不多,只不过函数变成了FileUtils.ReadJson,这里就不赘述了。


或者可以看我的另一篇博客,使用Unity原生API读取Json文件,性能更好。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 人在外地身份证到期了怎么办 手机进水了屏幕不亮怎么办 北京一证通过期怎么办 小米6音量键进水怎么办 考驾照怕过不了怎么办 学车对车没感觉怎么办 居住证到期2个月怎么办 生育险差一个月怎么办 驾照扣了38分怎么办 新疆转入山东上学怎么办手续 驾照过日期换证怎么办 机动车被扣24分怎么办 车辆被扣24分怎么办 现在深圳牌十年老车怎么办? 护士证过期4年了怎么办 护士资格证延续注册过期了怎么办 护士资格证过期没注册怎么办 护士资格证注册时间过期怎么办 辅警体检视力不行怎么办 护士延续注册体检怀孕怎么办 护士资格证没有延续注册怎么办 申请信用卡没有座机号码怎么办 网上申请信用卡没有座机号码怎么办 我叫上门服务被骗了怎么办 上门服务被骗了3000多怎么办 微信被骗9000元怎么办 奥迪a8气囊灯亮怎么办 驾考站岗迟到了怎么办 老板欠员工工资不给怎么办 如果有一天我没头发了怎么办 苏州公积金密码忘了怎么办 科二考试第二把怎么办 科一老是记不住怎么办 科目二考试没去怎么办 网约车驾龄不到怎么办 科四预约不上怎么办 教练不退钱怎么办找谁 驾考出入证丢了怎么办 科二成绩单丢了怎么办 考驾照的准考证丢了怎么办 驾考预约去不了怎么办