Unity 安卓游戏加载xml文件

前言

一般在电脑上面加载xml文件,我们都会使用XmlDocument.Load(Path)。在pc上面测试的时候是没有问题的,xml文件可以成功加载。但是当我们打包成apk文件,并在手机上面安装并游玩的时候,发现出现问题了,xml文件好像没有加载出来,因为游戏中的对话全部没法正常执行。原来,在安卓环境下不支持XmlDocument.Load(Path)。我们要使用WWW来加载xml文件。

创建xml

我的xml文件:



    
      我:
      哎呀!吓我一跳,我只是碰巧路过此地而已,你后面那扇门看起来挺诱人的,嘿嘿
    
    
      巨大雕像:
      碰巧路过?你以为人名警察会信你的鬼话么
    
    
      我:
      啊?人民警察?完蛋了,万一告我私闯名宅
    
    
      巨大雕像:
      不管我是谁,你今天死定了,任何人都不允许通过那扇门,主人是这么说的
    

将xml文件放在Assets文件夹下面的streamingAssets文件夹里面

加载xml文件

利用Application.platform == RuntimePlatform.Android判断是否处于安卓环境,因为Pc端和安卓端的路径写法是不一样的

if (Application.platform == RuntimePlatform.Android)
        {
            //安卓端写法
            filePath = Application.streamingAssetsPath + "/SpeakData/EnemySpeak.xml";
        }
        else
        {
            //PC端写法
       filePath="file://"+Application.streamingAssetsPath+"/SpeakData/EnemySpeak.xml";
        }

然后使用WWW加载路径:

 WWW www = new WWW(filePath);

利用 if(www.isDone)判断是否加载成功,加载成功后就可以获取xml的数据了,下面是完整代码:

private IEnumerator LoadXmlData()
    {
        string filePath;
        if (Application.platform == RuntimePlatform.Android)
        {
            filePath = Application.streamingAssetsPath + "/SpeakData/EnemySpeak.xml";
        }
        else
        {
           filePath="file://"+Application.streamingAssetsPath+"/SpeakData/EnemySpeak.xml";
        }
        WWW www = new WWW(filePath);
        yield return www;
        if(www.isDone)
        {
            XmlDocument xDo = new XmlDocument();
            xDo.LoadXml(www.text);
            //xDo.Load(filePath);
            //获取item节点里面的数据
            XmlNodeList xnl = xDo.SelectSingleNode("item").ChildNodes;
            foreach (XmlElement e in xnl)//遍历子节点数据
            {
                sdata = new StringBuilder();
                foreach (XmlElement e2 in e.ChildNodes)//遍历子节点的子节点数据
                {
                    //判断是哪个节点
                    if (e2.Name.Equals("name"))
                    {
                        sdata.Append(e2.InnerText + "\n");//获取节点内容
                    }
                    else if (e2.Name.Equals("speak"))
                    {
                        sdata.Append(e2.InnerText);//获取节点内容
                    }
                }
                speakList.Add(sdata.ToString());//将每次遍历完的数据添加到List
            }
        }
        yield return null;
}

疑问

使用WWW加载xml文件需要用到协程,我也不知道为什么,如果不使用协程就没法正常加载。到底是什么原理呢?

你可能感兴趣的:(Unity3d教程,加载xml,安卓端,Unity)