一:前言
首先要感谢周周的Unity小屋大佬,原文链接如下
https://blog.csdn.net/qq_42437783/article/details/121613573?spm=1001.2014.3001.5506
在此基础上增长了一些功能,使其比力美满
二:功能说明
通过xml文件写入问题答案息争析,点击开始答题进入答题界面,在规定时间内答题,倒计时结束,主动关闭答题界面,表现结束界面和得分,倒计时未结束,可以答题,答过的题不可二次修改,点击下方的小点按钮,选择对应的标题,标题选择完毕后,下方按钮也有对应标识,不可再次点击。
步伐运行如下:
三:UI界面先容
1.开始界面
2.答题界面
答题界面与周周的Unity小屋摆设的框架一样,留意预制体,xml文件的位置等。添加了得分,倒计时等。
3.结束界面
4.提示界面
四:代码誊写
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- public class Options : MonoBehaviour
- {
- /// <summary>
- /// 当前选项组件
- /// </summary>
- public Toggle thisToggle;
- /// <summary>
- /// 选项的内容文本
- /// </summary>
- public Text optionText;
- /// <summary>
- /// 选项对应的分数
- /// </summary>
- public int score;
- /// <summary>
- /// 选项的状态
- /// </summary>
- public bool IsSelect = false;
- public void Init(AnswerData answerData)
- {
- optionText.text = answerData.option;
- score = answerData.Score;
- thisToggle.onValueChanged.AddListener((isSelect) => { IsSelect =isSelect; });
- }
- }
复制代码 这个脚本挂载上option预制体上,吧对应的内容拖到对应位置即可。
- Panel_Question、ButtonItem、DataPath
这个代码挂在canvas上,其中代码中的命名与场景中的命名划一,将对应物体添加到对应位置上,其中ButtonItem是挂载上image上的,image是一个预制体,内容如下。
ButtonItem代码如下:
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- public class ButtonItem : MonoBehaviour
- {
- Button Btn;
- // Start is called before the first frame update
- void Start()
- {
- Btn = GetComponent<Button>();
- Btn.onClick.AddListener(ThisBtn);
- }
- public void ThisBtn()
- {
- Panel_Question.GetInstance().ThisBtn(this);
- }
- }
复制代码 其中,用www读取xml文件时,会报错,是xml格式有问题,我在读取时报错是XmlException: Data at the root level is invalid. Line 1, position 1.通过代码重新天生一个xml文件,再在其中添加想写的内容即可。我天生XmlTest的代码如下。有必要的可以参考
- using UnityEngine;
- using System.IO;
- using System.Xml;
- public class XmlTest : MonoBehaviour
- {
- // Use this for initialization
- void Start()
- {
- CreateXml();
- }
- ///
- /// Creates the xml.
- ///
- private void CreateXml()
- {
- //设置保存路径
- string path = Application.dataPath + "/XML/" + "ConfigFile.xml";
- //判断文件是否存在
- if (File.Exists(path) == false)
- {
- //创建一个xml文件
- XmlDocument xml = new XmlDocument();
- //创建最上层节点
- XmlElement root = xml.CreateElement("Root");
- //创建子节点
- XmlElement element = xml.CreateElement("Question");
- element.SetAttribute("SelectType", "True");
- //创建子节点的第一个子节点,设置属性并添加内容
- XmlElement Child1 = xml.CreateElement("Problem");
- Child1.InnerText = "这里输入您的题目";
- //创建子节点的第二个子节点,设置属性并添加内容
- XmlElement Child2 = xml.CreateElement("Answer");
- //创建三级子节点
- XmlElement item1 = xml.CreateElement("Item");
- item1.SetAttribute("option", "A.答案一");
- item1.InnerText = "0";
- XmlElement item2 = xml.CreateElement("Item");
- item2.SetAttribute("option", "B.答案一");
- item2.InnerText = "0";
- XmlElement item3 = xml.CreateElement("Item");
- item3.SetAttribute("option", "C.答案一");
- item3.InnerText = "1";
- XmlElement item4 = xml.CreateElement("Item");
- item4.SetAttribute("option", "D.答案一");
- item4.InnerText = "0";
- //二级子节点
- XmlElement Child3 = xml.CreateElement("Analysis");
- Child3.InnerText = "这里输入解析";
- //创建子节点
- XmlElement element2 = xml.CreateElement("Question");
- element2.SetAttribute("SelectType", "True");
- //创建子节点的第一个子节点,设置属性并添加内容
- XmlElement Child2_1 = xml.CreateElement("Problem");
- Child2_1.InnerText = "这里输入您的题目gvfrebr";
- //创建子节点的第二个子节点,设置属性并添加内容
- XmlElement Child2_2= xml.CreateElement("Answer");
- //创建三级子节点
- XmlElement item2_1 = xml.CreateElement("Item");
- item2_1.SetAttribute("option", "A.答案一");
- item2_1.InnerText = "0";
- XmlElement item2_2 = xml.CreateElement("Item");
- item2_2.SetAttribute("option", "B.答案44");
- item2_2.InnerText = "0";
- XmlElement item2_3 = xml.CreateElement("Item");
- item2_3.SetAttribute("option", "C.答案3");
- item2_3.InnerText = "1";
- XmlElement item2_4 = xml.CreateElement("Item");
- item2_4.SetAttribute("option", "D.答案一");
- item2_4.InnerText = "0";
- //二级子节点
- XmlElement Child2_3 = xml.CreateElement("Analysis");
- Child2_3.InnerText = "这里输入解析";
- //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
- element2.AppendChild(Child2_1);
- Child2_2.AppendChild(item2_1);
- Child2_2.AppendChild(item2_2);
- Child2_2.AppendChild(item2_3);
- Child2_2.AppendChild(item2_4);
- element2.AppendChild(Child2_2);
- element2.AppendChild(Child2_3);
- root.AppendChild(element2);
- element.AppendChild(Child1);
- Child2.AppendChild(item1);
- Child2.AppendChild(item2);
- Child2.AppendChild(item3);
- Child2.AppendChild(item4);
- element.AppendChild(Child2);
- element.AppendChild(Child3);
- root.AppendChild(element);
- xml.AppendChild(root);
- //保存XML文档
- xml.Save(path);
- Debug.Log("Xml 创建成功!");
- }
- }
- }
复制代码 也可以只天生两个root根节点,然后内容自己再xml中写,就不用通过代码添加了。
通过xml文件读取的数据的路径通过一个代码封装静态变量,全局利用,代码如下:DataPath
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- /// <summary>
- /// 全局静态类,用来定义静态字段,方便调用
- /// </summary>
- public class DataPath
- {
- public static string QuestionData = "file://" + Application.dataPath + "/XML/" + "ConfigFile.xml";
- public static string QuestionText = "QuestionText";
- }
复制代码 五:步伐包下载
https://www.aigei.com/item/unity_da_ti_xi.html
来源:https://blog.csdn.net/shijinlinaaa/article/details/129025153
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |