unity3d学习笔记(十六)--unity3d读取plist或xml文件
本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢。 http://blog.csdn.net/lzhq1982/article/details/12949827 前一篇文章介绍了协同异步加载游戏场景,但前台没干活,浪费了。有的游戏在loading的时候会把一些游戏的Tips(小提示)介绍给玩家,我这里说一下是怎么实现的。 说到小提示,其实是后台有个配置文件,里面有很多提示语句,程序以一定的时间间隔随机读取一条,显示在界面上,很简单。这里说到配置文件,花样就多了,以前做cocos2d-x游戏时,用的最多的是plist文件和csv文件,unity用的都是xml和exel文件,那我能用unity也读取plist文件和csv文件文件吗,当然可以,本篇我先说读取plist文件。 其实读取plist文件很简单,因为plist文件就是xml文件,所以只要把文件扩展名改一下就可以了,把.plist改成.xml,然后按读取xml的方式读它就行了,哈哈,不要喷我。所以我重点介绍一下读取xml的方法。 先看一下我的plist文件内容: [html]view plaincopy
这是“时空领地”的Loading界面用到的tips,当时用plist做的,用xml文件打开,其实就是个xml,这就好办了,unity已经有成型的读取xml的接口了。先上一下代码吧。 [csharp] voidloadXml() { stringfilePath=Application.dataPath+@"/Resource/settings/tips.xml"; if(File.Exists(filePath)){ XmlDocumentxmlDoc=newXmlDocument(); xmlDoc.Load(filePath); XmlNodeListnode=xmlDoc.SelectSingleNode("plist").ChildNodes; foreach(XmlElementnodeListinnode){ foreach(XmlElementxeinnodeList){ if(xe.Name=="array"){ inti=0; _tips=newstring[xe.ChildNodes.Count]; foreach(XmlElementxe1inxe.ChildNodes){ //Debug.Log(xe1.InnerText); _tips[i]=xe1.InnerText; i++; } break; } } } } } 结合上面的配置文件,你会很容易明白怎么用的。Application.dataPath是Assets文件夹目录,先判断文件是否存在,如果存在,创建一个XmlDocument,load加载文件,根节点是<plist>,先循环遍历<plist>的子节点们,这里只有<dict>,然后再循环遍历<dict>的子节点们,这里有两个,一个是<key>,一个是<array>,所以判断Name是否array,是的话创建一个字符串数组,拥有array这么多元素的数组,然后从array里逐一读取出来存到数组里。以后我们就可以在该数组里随机查找了。这段代码在start里调用,只读取一次。记住,不要试图总是查询外部文件,那样效率会很低下的,提前cache起来是不错的选择。 读取完了,我要在loading节目加载了,我用的依然是NGUI,在bottom那里布局个label,不清楚怎么布局的看我这篇文章:unity3d学习笔记(八)--NGUI制作游戏界面,这里截图如下:
其中Label要用中文字体,不清楚怎么创建中文字体的看我这篇文章:unity3d学习笔记(十)--NGUI制作中文字体。 最后程序控制一定间隔读取上面cache的字符串。 privatestring[]_tips; publicUILabel_tipsLabel; float_lastTime=0.0f; constintWAIT_TIME=2;
voidStart(){ loadXml(); if(_tips!=null&&_tips.Length>0){ intidx=Random.Range(0,_tips.Length-1); _tipsLabel.text=_tips[idx]; } StartCoroutine(loadScene()); }
//Updateiscalledonceperframe voidUpdate(){ if(_tips==null||_tips.Length<=0) return;
if(Time.time-_lastTime>=WAIT_TIME){ _lastTime=Time.time; _tipsLabel.text=_tips[idx]; } }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |