[实例] unity 使用xml数据 随机生成名字
一、通过excel生成xml数据
1. 创造xml模版
- 制作xml模板格式文件(必须要有两个相同的数据项,否则无法在Excel中进行映射
-
<?xml version="1.0" encoding="UTF-8"?> <root> <item ID=""> <surname></surname> <man></man> <woman></woman> </item> <item ID=""> <surname></surname> <man></man> <woman></woman> </item> </root>
-
2. 将模版导入excel,通过excel生成新的xml文件
- 在Excel中打开自定义菜单:文件-选项-自定义功能区-主选项卡,将开发工具添加到主选项卡。
- 在开发工具面板里:XML-源-XML映射-添加模版文件
- 选中源面板里的模版,映射到表格里。
- 在开发工具面板里:XML-导出

二、在unity里加载和使用xml数据
1. 加载文件
TextAsset xml = Resources.Load<TextAsset>(filePath); XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.text);
2. 获得xml
- 获取根节点下的所有子节点的List:
XmlNodeList nodLst = doc.SelectSingleNode("root").ChildNodes;
- 将某一个节点转化为一个XmlElement:
XmlElement ele = nodLst[i] as XmlElement;
- 从XmlElement里获取名称为"ID"的数据:
string value = ele.GetAttributeNode("ID").InnerText;
3. 具体函数如下
private List<string> surnameLst = new List<string>(); // 存姓
private List<string> manLst = new List<string>(); //存男名
private List<string> womanLst = new List<string>(); //存女名
//获得xml数据的函数 private void InitRDNameCfg() { TextAsset xml = Resources.Load<TextAsset>(PathDefine.RDNameCfg); if (!xml) { Debug.LogError("xml file:" + PathDefine.RDNameCfg + " not exist"); } else { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.text); XmlNodeList nodLst = doc.SelectSingleNode("root").ChildNodes; //获取每一个名字 for (int i = 0; i < nodLst.Count; i++) { XmlElement ele = nodLst[i] as XmlElement; if (ele.GetAttributeNode("ID") == null) { continue; } int ID = Convert.ToInt32(ele.GetAttributeNode("ID").InnerText); //遍历每一个姓、男名、女名 foreach (XmlElement e in nodLst[i].ChildNodes) { switch (e.Name) { case "surname": surnameLst.Add(e.InnerText); break; case "man": manLst.Add(e.InnerText); break; case "woman": womanLst.Add(e.InnerText); break; } } } } }
三、随机生成名字的函数
将以下函数加载到unity中对应的按钮上,即可随机生成名字
public string GetRDNameData(bool man = true) {
//随机选择姓list里的一个元素
string rdName = surnameLst[PETools.RDInt(0, surnameLst.Count - 1)];
if (man) {
rdName += manLst[PETools.RDInt(0, manLst.Count - 1)];
}
else {
rdName += womanLst[PETools.RDInt(0, womanLst.Count - 1)];
}
return rdName;
}
浙公网安备 33010602011771号