通过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);
- }
- }
- }
通过XML文件实现人物之间的对话的更多相关文章
- C#关于xml文件和TreeView之间的转换解析
主窗体: using System; using System.Collections; using System.Collections.Generic; using System.Componen ...
- C#Object与XML文件或二进制文件之间的转化
Object To Xml 文件 public static bool Serializer<T>(object obj, string path) { FileStream xmlfil ...
- C#对象与XMl文件之间的相互转换
C#提供三种序列化方式,分别为: 1.是使用BinaryFormatter进行串行化: 2.使用SoapFormatter进行串行化: 3.使用XmlSerializer进行串行化.其中对于Binar ...
- C#对象与XMl文件之间的相互转换(转)
本文是对C#中对象与XMl文件之间的相互转换进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 C#提供三种序列化方式,分别为:1.是使用BinaryFormatter进行串行化: 2.使 ...
- 解析xml文件的几种技术与Dom4j与sax之间的对比
一.解析xml文件的几种技术:dom4j.sax.jaxb.jdom.dom 1.dom4j dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的 ...
- JAXB—Java类与XML文件之间转换
JAXB-Java类与XML文件之间转换 简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生 ...
- C# datatable 与 xml文件之间的转换
/// <summary> /// datatable转XML文件 /// </summary> /// <param name="dtTable"& ...
- WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)
WebAPI调用笔记 前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...
- web.xml文件加载顺序
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
随机推荐
- PHP字符串——字符串函数
比较字符串PHP有两个操作符和6个函数用于字符串间相互比较. 精确比较你可以用==和===操作符来比较两个字符串是否相等.这两个操作符的不同在于它们如何处理非字符串数据类型的操作数.==操作符把非字符 ...
- CSS3新特性2D、3D效果讲解
希望这篇博客可以对你有所帮助,如果有什么技术上的问题,希望我们可以做进一步的交流,如果你觉得我哪里阐述的不正确或者你有更好的更透彻的理解,也可以联系我,我在这里随时等着你. 对于css/html是每个 ...
- BZOJ5329:[SDOI2018]战略游戏(圆方树,虚树)
Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着 ...
- [USACO19FEB]Moorio Kart
题目 我们的神仙教练在考试里放了这道题,当时我非常惊讶啊 背包是\(O(n^3)\)的吧明明是带根号的好吧,那既然要优化的话 NTT!什么时候我们教练会在考试里放多项式了 模数\(1e9+7\)? 任 ...
- ES6新特性2:变量的解构赋值
本文摘自ECMAScript6入门,转载请注明出处. ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring).不仅适用于var命令,也适用于let和c ...
- 记录一个python公式罗列的方法 join()方法和map()方法的妙用
题干: 怎样将一个列表中的元素读出,并列出计算式子 比如:[,,,] 输出:+++ = 列表中的元素个数不定 小白和大神的方法: #小白的 numlist=[,,,] sum1='' cal='+' ...
- 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 ...
- Linux系统管理命令
Linux系统管理命令 命令 说明 stat 显示指定文件的相关信息,比ls命令显示内容更多 who 显示在线登录用户 hostname 显示主机名称 uname 显示系统信息 top 显示当前系统中 ...
- Leetcode590. N-ary Tree Postorder Traversal
590. N-ary Tree Postorder Traversal 自己没写出来 优秀代码: """ # Definition for a Node. cla ...
- 443 C. Short Program
http://codeforces.com/contest/879/problem/C Petya learned a new programming language CALPAS. A progr ...