Unity 3D C#Strings.XML方法

时间:2016-06-26 18:38:01

标签: c# xml unity3d unityscript unity5

我正在尝试为Unity3D创建一个方法,允许我通过XML文件填充UI。即,不是命名每个按钮和标签,它们可以携带通用名称,如“进度按钮”或“大文本”然后使用C#脚本匹配XML文件中的详细名称。

我已经广泛搜索了教程,示例和指南,但是我发现的每一个都因为我想要实现的目标而过度。

理想情况下,我想在XML文件中使用以下结构提供XML文件:

<?xml version="1.0" encoding="utf-8"?>
<strings>
  <string name="progressBtn">Next</string>
  <string name="reverseBtn">Back</string>
  <string name="largeText">This is Large Text</string>
</strings>

我知道如何通过访问text-object的属性来动态地改变文本,所以我并不担心这一步。我现在的目的是:

using UnityEngine;
using System.Collections;
using System.Xml;
using System.IO;

public class textParser : MonoBehaviour
{

public TextAsset targetXMLFile;
public GameObject uiObjectText;
string targetString;

// Use this for initialization
void Start ()
{
    checkFile();//Check for strings file.
    checkTarget(uiObjectText.name);//Check for the object name in the GUI object
}

// Update is called once per frame
void Update ()
{
    //TODO
}

//Check for strings file.
void checkFile()
{
    if (targetXMLFile == null) //If is Null, Log an Error
    {
        print("Error: target text file not loaded!");
    }
    else // If something, log the file name
    {
        print(targetXMLFile.name + " Target text file loaded!");
    }
}

//Check for the object name in the GUI object
void checkTarget(string target)
{
    if (target == null) //If is Null, Log an Error
    {
        print("Error: Unable to extract target ui object name!");
    }
    else// if something, Log the GUI Object name
    {
        print("Found: " + target + " In GUI.");
    }
}
}

显然非常基本,但它确实有效。我知道我需要使用XML库来完成我的搜索(我理解的字符串匹配)。走到那一步是我的目标。

任何更多关于XML使用的教程我都很乐意看,或者是否有人可以让我知道我需要访问哪些方法才能实现这一目标。就个人而言,如果有人能提供示例代码的链接,我很想理解我要做的事情背后的冗长过程。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以使用.NET中的Xml.Serialization:

Marcus Müller

答案 1 :(得分:-1)

尝试这样的事情

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string header = "<?xml version=\"1.0\" encoding=\"utf-8\"?><strings></strings>";
            XDocument doc = XDocument.Parse(header);
            XElement strings = (XElement)doc.FirstNode;

            List<List<string>> buttons = new List<List<string>>() {
                                new List<string>() {"progressBTn", "Next"},
                                new List<string>() {"reverseBth", "Back"},
                                new List<string>() {"largeText", "This is Large Text"}
            };

            foreach(List<string> button in buttons)
            {
                strings.Add(
                    new XElement("string", new object[] {
                        new XAttribute("name", button[0]),
                        button[1]
                    }));
            }

        }
    }
}