本系列文章由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的方法。
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEplistPUBLIC"-//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plistversion="1.0">
- <dict>
- <key>tips</key>
- <array>
- <string>重新挑战已经通过的关卡,也可以获得金币</string>
- <string>某一关卡无法通过?您缺少的仅仅是英雄和士兵的等级罢了!</string>
- <string>优先升级城堡等级、兵力恢复速度,会带来意想不到效果</string>
- <string>选择合适的时机使用英雄技能或城防道具,可以提高获胜几率</string>
- <string>尽可能一次性出多个士兵,能够最大化提高您的军团战斗力</string>
- <string>合适的时机使用英雄技能或城防道具,可以提高您的获胜几率</string>
- <string>获得成就可以获得大量钻石,当您缺少钻石时不妨看看成就列表</string>
- <string>每个兵种的特殊各不相同,不仅仅是高级兵种才有展示的空间</string>
- <string>当连续闯关失败时,换一个战术或出兵的方式就能有所转机</string>
- <string>让士兵与敌人的等级保持一致是一个不错的主意</string>
- <string>获得成就可以获得大量钻石,缺少钻石的时候不妨看看成就列表</string>
- <string>战斗中想查看地图上的状态,只需要左右滑动屏幕就行啦</string>
- </array>
- </dict>
- </plist>
- 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;
- }
- }
- }
- }
- }
读取完了,我要在loading节目加载了,我用的依然是NGUI,在bottom那里布局个label,不清楚怎么布局的看我这篇文章:unity3d学习笔记(八)--NGUI制作游戏界面,这里截图如下:
其中Label要用中文字体,不清楚怎么创建中文字体的看我这篇文章:unity3d学习笔记(十)--NGUI制作中文字体。
最后程序控制一定间隔读取上面cache的字符串。
- privatestring[]_tips;
- publicUILabel_tipsLabel;
- privatefloat_lastTime=0.0f;
- privateconstintWAIT_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;
- intidx=Random.Range(0,_tips.Length-1);
- _tipsLabel.text=_tips[idx];
- }
- }
这样2秒钟界面显示一下tips,我们的loading界面的协同异步终于有意义了。最后上个图吧。