[实例] 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;
    }

  

  

posted @ 2023-02-14 13:21  小饭爱编程  阅读(55)  评论(0)    收藏  举报