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

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[];//角色名字
  7. role_detail = role_array[];//角色对话
  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())
  9. {
  10. //通过集合的长度,判断对话是否全部读取完毕
  11. if (listIndex >= ListXml.Count - )
  12. {
  13. //对话读取完毕
  14. }
  15. else
  16. {
  17. //读取行下一条对话
  18. listIndex++;
  19. //调用ListDiv方法继续加载对话
  20. ListDiv(ListXml, listIndex);
  21. }
  22. }
  23. }

通过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. PHP字符串——字符串函数

    比较字符串PHP有两个操作符和6个函数用于字符串间相互比较. 精确比较你可以用==和===操作符来比较两个字符串是否相等.这两个操作符的不同在于它们如何处理非字符串数据类型的操作数.==操作符把非字符 ...

  2. CSS3新特性2D、3D效果讲解

    希望这篇博客可以对你有所帮助,如果有什么技术上的问题,希望我们可以做进一步的交流,如果你觉得我哪里阐述的不正确或者你有更好的更透彻的理解,也可以联系我,我在这里随时等着你. 对于css/html是每个 ...

  3. BZOJ5329:[SDOI2018]战略游戏(圆方树,虚树)

    Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着 ...

  4. [USACO19FEB]Moorio Kart

    题目 我们的神仙教练在考试里放了这道题,当时我非常惊讶啊 背包是\(O(n^3)\)的吧明明是带根号的好吧,那既然要优化的话 NTT!什么时候我们教练会在考试里放多项式了 模数\(1e9+7\)? 任 ...

  5. ES6新特性2:变量的解构赋值

    本文摘自ECMAScript6入门,转载请注明出处. ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring).不仅适用于var命令,也适用于let和c ...

  6. 记录一个python公式罗列的方法 join()方法和map()方法的妙用

    题干: 怎样将一个列表中的元素读出,并列出计算式子 比如:[,,,] 输出:+++ = 列表中的元素个数不定 小白和大神的方法: #小白的 numlist=[,,,] sum1='' cal='+' ...

  7. Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案

    在VS 2012 中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误: error C4996: 'scanf': This function or variable may ...

  8. Linux系统管理命令

    Linux系统管理命令 命令 说明 stat 显示指定文件的相关信息,比ls命令显示内容更多 who 显示在线登录用户 hostname 显示主机名称 uname 显示系统信息 top 显示当前系统中 ...

  9. Leetcode590. N-ary Tree Postorder Traversal

      590. N-ary Tree Postorder Traversal 自己没写出来   优秀代码: """ # Definition for a Node. cla ...

  10. 443 C. Short Program

    http://codeforces.com/contest/879/problem/C Petya learned a new programming language CALPAS. A progr ...