Unity直接读取XML,而不是将它们合并到assetsbundles中

时间:2016-06-29 08:34:24

标签: xml dictionary unity3d assets

我有一些代码从XML文件中读取文本,这些文件已经添加到assetsbundles中,从我看到的每个文件看起来似乎有一个包。

我想避免使用bundle并直接读取XML内容。现在使用捆绑包的代码是这样的:

foreach(KeyValuePair<string,int> kvp in xmlFileDic)
{
string name = kvp.Key;
string path = xmlBasePath + name + ".assetbundle";
int version = kvp.Value;
WWW www = WWW.LoadFromCacheOrDownload(path,kvp.Value);
yield return www;           
AssetBundleRequest ab = www.assetBundle.LoadAsync(name,typeof(TextAsset));
yield return ab;                    
xmlLoadDic.Add(name,(TextAsset)ab.asset);
www.assetBundle.Unload(false);

...
and reading data
...

string gamerules = FileManagement.xmlLoadDic["GameMasterData"].text;
//string gamerules = www.text;
//Debug.Log("master path:"+masterPath+"game rules:"+gamerules);
System.IO.TextReader reader = new System.IO.StringReader(gamerules);
SmallXmlParser parser = new SmallXmlParser();
MasterDataHandler handler = new MasterDataHandler();
parser.Parse(reader,handler);

mPhaseList = handler.phaseList;

有关如何轻松完成此任务的任何提示?

1 个答案:

答案 0 :(得分:0)

你可以这样做。这将从Resources文件夹加载XML文件并加载到XElement中,您可以使用LinQ来读取和处理它。以下是一些示例代码,可帮助您入门:

        public class XMLReader : MonoBehaviour 
        { 
            XElement someXML;
            void Awake()
            {
              TextAsset textAsset = (TextAsset)Resources.Load("Name_OF_XML_File");
              TextReader txtReader = new StringReader(textAsset.text);
              someXML= XElement.Load(txtReader);
              string someData = (from data in someXML.Descendants("node") select data.Element("Element_Name").Value).ToString();
            }
        }