Unity 3D C# Strings.XML 方法
Unity 3D C# Strings.XML Methods
我正在尝试为 Unity3D 创建一个方法,允许我通过 XML 文件填充 UI。即,与其命名每个按钮和标签,它们可以带有通用名称,如 "progress button" 或 "large text" 然后使用 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>
我知道如何通过访问文本对象的属性来统一动态更改文本,所以我不担心这一步。我目前拥有的是:
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 的使用更相关的教程我很乐意查看,或者是否有人可以让我了解我需要访问哪些方法才能完成此操作。就个人而言,如果有人可以为示例代码提供 link,我很想了解我正在尝试做的事情背后的详细过程。
提前致谢!
您可以使用 .NET 中的 Xml.Serialization:
尝试这样的事情
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]
}));
}
}
}
}
我正在尝试为 Unity3D 创建一个方法,允许我通过 XML 文件填充 UI。即,与其命名每个按钮和标签,它们可以带有通用名称,如 "progress button" 或 "large text" 然后使用 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>
我知道如何通过访问文本对象的属性来统一动态更改文本,所以我不担心这一步。我目前拥有的是:
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 的使用更相关的教程我很乐意查看,或者是否有人可以让我了解我需要访问哪些方法才能完成此操作。就个人而言,如果有人可以为示例代码提供 link,我很想了解我正在尝试做的事情背后的详细过程。
提前致谢!
您可以使用 .NET 中的 Xml.Serialization:
尝试这样的事情
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]
}));
}
}
}
}