一、建立一个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);
}
}
}

通过XML文件实现人物之间的对话的更多相关文章

  1. C#关于xml文件和TreeView之间的转换解析

    主窗体: using System; using System.Collections; using System.Collections.Generic; using System.Componen ...

  2. C#Object与XML文件或二进制文件之间的转化

    Object To Xml 文件 public static bool Serializer<T>(object obj, string path) { FileStream xmlfil ...

  3. C#对象与XMl文件之间的相互转换

    C#提供三种序列化方式,分别为: 1.是使用BinaryFormatter进行串行化: 2.使用SoapFormatter进行串行化: 3.使用XmlSerializer进行串行化.其中对于Binar ...

  4. C#对象与XMl文件之间的相互转换(转)

    本文是对C#中对象与XMl文件之间的相互转换进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 C#提供三种序列化方式,分别为:1.是使用BinaryFormatter进行串行化: 2.使 ...

  5. 解析xml文件的几种技术与Dom4j与sax之间的对比

    一.解析xml文件的几种技术:dom4j.sax.jaxb.jdom.dom 1.dom4j dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的 ...

  6. JAXB—Java类与XML文件之间转换

    JAXB-Java类与XML文件之间转换 简介         JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生 ...

  7. C# datatable 与 xml文件之间的转换

    /// <summary> /// datatable转XML文件 /// </summary> /// <param name="dtTable"& ...

  8. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

  9. web.xml文件加载顺序

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

随机推荐

  1. 从0开始搭建Element项目

    第一步:安装 Node.js/NPM 下载Node.js:https://nodejs.org/zh-cn/download/ 下载安装即可. 第二步:安装 vue-cli 打开 cmd 创建,在命令 ...

  2. JavaScript计算指定日期与当前日期的相差天数

    java中处理2个时间段相差几天很容易,直接调相关方法就行,不过js处理这类问题稍微有点不易,项目开发中也用到了,如下: 1 2 3 4 5 6 7 8 9 10 11 12 //计算两个日期天数差的 ...

  3. Java基础知识强化107:DecimalFormat

    1. 引入: 如何控制输出数据的精度? >1. 使用Math.round方法 (1)Java如何把一个float(double)四舍五入到小数点后2位,4位,或者其它指定位数 ? 答:比如,如下 ...

  4. Laravel中如何将单个routes.php分割成多个子文件

    随着业务逻辑越来越复杂,routes.php文件也会变得越来越庞大,为了便于管理,我们可以像管理配置文件那样将其分割成多个子文件,这实现起来很简单: // app/routes.php ... // ...

  5. 1798. [AHOI2009]维护序列【线段树】

    Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...

  6. P2110 欢总喊楼记

    题目描述 诗经有云: 关关雎鸠,在河之洲.窈窕淑女,君子好逑. 又是一个被风吹过的夏天--一日欢总在图书馆中自习,抬起头来,只见一翩跹女子从面前飘过,真是回眸一笑百媚生,六宫粉黛无颜色!一阵诗情涌上欢 ...

  7. chrome的uget扩展程序红色 Unable to connect with uget-integrator问题

    我们根据网上的教程在ubuntu16.04中安装下载工具uget+aria2并配置chrome时,最后重新打开chrome浏览器,发现uget扩展程序是红色的,点开看到”Unable to conne ...

  8. crontab定时执行

    一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...

  9. Object C学习笔记12-集合

    这里讲到的集合是指Set集合,其实Array也是一种类型的集合.在Object C中提供了两个集合类NSSet和NSMutableSet.其实NSSet和NSArray性质一样,都是用于存储对象的. ...

  10. springMVC框架 对BaseCtrl封装,简化开发

    让你的项目有对象,你的项目如何才会有面向对象特征呢?没有面向对象特征的项目不是好项目哦.此篇博文会使用到面向对象特征中的封装继承,还有就是枚举类型.这篇博文教你如何让你的项目体现面向对象特征. 最近公 ...