通过XML文件实现人物之间的对话

一、建立一个XML文档,放在项目中Assert/Resources/XML文件下

XML的内容如下:

 <?xml version="1.0" encoding="utf-8"?>

 <dialogues1>
<dialogue>
<role>门派长老</role>
<detail>李清,你找我意欲何事?</detail>
</dialogue>
<dialogue>
<role>李清</role>
<detail>回禀长老,弟子最近想出城历练一番,望长老允</detail>
</dialogue>
<dialogue>
<role>门派长老</role>
<detail>城外老虎数量不断增多,已经威胁到了人们的出行</detail>
</dialogue>
<dialogue>
<role>李清</role>
<detail>弟子愿去赶走虎群</detail>
</dialogue>
<dialogue>
<role>门派长老</role>
<detail>这里是500金币,你去准备一些随身物品,明天出发</detail>
</dialogue>
<dialogue>
<role>李清</role>
<detail>弟子明白</detail>
</dialogue>
</dialogues1>

二、新建一个C#脚本,读取文件

脚本主要代码如下:

1、加载XML文件,将文件的数据存入到LIst集合中去

  public static List<string> ListXml;//定义一个string类型的List集合

  public static int listIndex = ; 
 public static string role;//角色名字
public static string role_detail;//角色的对话
 public static void LoadXML(string name)
{
ListXml = new List<string>();
XmlDocument xmlDocument = new XmlDocument();//定义一个XmlDocument
string data = Resources.Load(@"XML\"+name).ToString();//Resources加载XML文档
xmlDocument.LoadXml(data);
//SelectSingleNode(name).ChildNodes 查询该文档下的所有子集,返回一个集合
XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode(name).ChildNodes;
//遍历集合,给每个子集(每条对话)增加一个分割标识符“:”,方便下面字符串的分割
foreach (var xmlNode in xmlNodeList)
{
XmlElement xmlElement = (XmlElement)xmlNode;
ListXml.Add(xmlElement.ChildNodes.Item().InnerText+":"+ xmlElement.ChildNodes.Item().InnerText);
}
}

2、分割集合中的子集(每条对话),根据每个子集的角色名字(role),显示出所对应的UI

  //分割每个子集(每条对话)
public static void ListDiv(List<string> rolelist,int index)
{ string[] role_array = rolelist[index].Split(':');//将每条对话从设置好的标识符“:”分割
role = role_array[];//角色名字
role_detail = role_array[];//角色对话
Debug.Log(role +":"+ role_detail);
string text = role + ":" + role_detail;
//根据上面分割的role(角色名字),显示所对应的对话框
switch (role)
{
case "李清":
//显示UI界面
//text值传过去
//我这里用的是UI框架 和 一个text的全局变量来控制的
TTUIPage.ShowPage<Liqin>();
Global_Variable.Liqin_text.text = text.ToString();
break;
case "门派长老":
TTUIPage.ShowPage<Dean>();
Global_Variable.Dean_text.text = text.ToString();
break;
}
}

3、加载XML文件,读取对话

 private void Start()
{
//调用LoadXML方法
LoadXML("dialogues1");
}
private void Update()
{
if (Input.GetMouseButtonDown())
{
//通过集合的长度,判断对话是否全部读取完毕
if (listIndex >= ListXml.Count - )
{
//对话读取完毕
}
else
{
//读取行下一条对话
listIndex++;
//调用ListDiv方法继续加载对话
ListDiv(ListXml, listIndex);
}
}
}
上一篇:System.gc


下一篇:线程池之 newScheduledThreadPool中scheduleAtFixedRate(四个参数)