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

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

XML的内容如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <dialogues1>
 4   <dialogue>
 5     <role>门派长老</role>
 6     <detail>李清,你找我意欲何事?</detail>
 7   </dialogue>
 8   <dialogue>
 9     <role>李清</role>
10     <detail>回禀长老,弟子最近想出城历练一番,望长老允</detail>
11   </dialogue>
12   <dialogue>
13     <role>门派长老</role>
14     <detail>城外老虎数量不断增多,已经威胁到了人们的出行</detail>
15   </dialogue>
16   <dialogue>
17     <role>李清</role>
18     <detail>弟子愿去赶走虎群</detail>
19   </dialogue>
20   <dialogue>
21   <role>门派长老</role>
22   <detail>这里是500金币,你去准备一些随身物品,明天出发</detail>
23   </dialogue>
24   <dialogue>
25     <role>李清</role>
26     <detail>弟子明白</detail>
27   </dialogue>
28 </dialogues1>

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

脚本主要代码如下:

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

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

 1 public static int listIndex = 0; 

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

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

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

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

 1 private void Start()
 2     {
 3         //调用LoadXML方法
 4         LoadXML("dialogues1");
 5     }
 6     private void Update()
 7     {
 8         if (Input.GetMouseButtonDown(0))
 9         {
10             //通过集合的长度,判断对话是否全部读取完毕
11             if (listIndex >= ListXml.Count - 1)
12             {
13                 //对话读取完毕
14             }
15             else
16             {
17                 //读取行下一条对话
18                 listIndex++;
19                 //调用ListDiv方法继续加载对话
20                 ListDiv(ListXml, listIndex);
21             }
22         }       
23     }

 

转载于:https://www.cnblogs.com/fancy0629/p/9110206.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值