栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity答题系统

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity答题系统

文章目录
      • 答题系统Demo前言
      • 准备工作
        • 搭建答题系统界面UI
        • 将题库xml文件存放在自己创建的XML文件夹下
      • 编写脚本实现答题系统相关功能
        • Panel_Question.cs脚本挂载到主界面Panel_Question上
        • Options.cs脚本挂载的选项预制体上,管理每一个选项的数据
      • 答题系统demo演示
      • 额外的知识

答题系统Demo前言

大四毕设的时候,参考网上大佬的答题系统,移植到了我的毕设项目中去,总感觉那个答题系统不够满意,但是那会技术有限,没有去深入研究完善,而且总有bug,后面答辩后也没管了。工作了,学的东西多了点,琢磨着自己也搞个答题系统玩玩,这个demo用的是加载XML文档的方法创建题目,xml文档中可以设置题目是单选还是多选。有上一题、下一题的功能,每一题都有提交功能,只有选择了答案才能提交,提交了会显示题目的解析。能满足一般的答题系统的需求了。

准备工作 搭建答题系统界面UI

如图所示:

其中题目选项和解析内容使用滚动视图(scroll view)来规范显示内容。这里还需要在滚动视图的content物体上添加自动布局的组件:设置垂直布局自适应。

注意:
在使用滚动视图的地方,将content作为父物体的,都要在content物体上添加自动布局组件,并在子元素自适应,不然你会看到生成的题目有可能飞到十万八千里之外,那这样在视图里面就看不到了。

将题库xml文件存放在自己创建的XML文件夹下

xml文档内容格式如下:

编写脚本实现答题系统相关功能 Panel_Question.cs脚本挂载到主界面Panel_Question上
public class Panel_Question : MonoBehaviour
{
    /// 
    /// 上一题按钮
    /// 
    private Button previousBtn;
    /// 
    /// 提交按钮
    /// 
    private Button submitBtn;
    /// 
    /// 下一题按钮
    /// 
    private Button nextBtn;
    /// 
    /// 当前是第几道题
    /// 
    private Text questionID;
    /// 
    /// 解析内容文本
    /// 
    private Text analysisData;
    /// 
    /// 题目的父节点
    /// 
    private Transform questionRoot;
    private Transform questionBtnRoot;
    /// 
    /// 选项的组
    /// 
    private ToggleGroup questionGroup;
    /// 
    /// 答题界面数据内容
    /// 
    private QuestionPanelData mQuestionPanelData;
    /// 
    /// 每一道题的题目内容
    /// 
    private QuestionData mQuestionData;
    /// 
    /// 题目内容物体
    /// 
    private GameObject mQuestion;
    /// 
    /// 题目计数
    /// 
    private int mQuestionCount;
    /// 
    /// 选项的链表
    /// 
    private List options=new List();
    private void Awake()
    {
        Init();
    }
    /// 
    /// 初始化找到相关物体和组件,并给按钮添加监听方法
    /// 
    private void Init()
    {
        previousBtn = transform.Find("BGImage/topic/btn_Previous").GetComponent

DataPath.cs全局静态类:

Options.cs脚本挂载的选项预制体上,管理每一个选项的数据
public class Options : MonoBehaviour
{
    /// 
    /// 当前选项组件
    /// 
    public Toggle thisToggle;
    /// 
    /// 选项的内容文本
    /// 
    public Text optionText;
    /// 
    /// 选项对应的分数
    /// 
    public int score;
    /// 
    /// 选项的状态
    /// 
    public bool IsSelect=false;

    public void Init(AnswerData answerData)
    {
        optionText.text = answerData.option;
        score = answerData.Score;
        thisToggle.onValueChanged.AddListener((isSelect) => { IsSelect = isSelect; });
    }
}

答题系统demo演示

单选:

多选:

选错:

这个答题系统满足了基本的单选多选需求,后期可以考虑完善其他功能…

额外的知识

demo用到的Application.dataPath指的是程序的数据文件所在的文件夹路径,这里是因为在PC平台使用www类加载资源,所以加载路径要使用file://协议实现加载,否则会加载失败。平台不一样,路径也不一样。
执行以下代码:

① Yield return null,在此表示暂缓一帧,在下一帧才执行后面的代码,等同于yield return +任意数字,yield return www表示等待资源加载完成,再执行后面的代码,等同于www.isDone.
② using语句在此处的作用是,使用了www类的实例,结束的时候自动调用Dispose处理实例对象。即将其释放掉。
③ Unity里加载xml文件的一般流程是:引入System.Xml命名空间,写加载解析的函数,函数里先创建xml文档的对象:XmlDocument doc=new XmlDocument();,再通过调用XmlNodeList、XmlNode、XmlElement等类的属性和方法去遍历查找并读取相关的节点数据。
④ Xml类常用的一些类和方法:

其中Load()方法是指可以从 一个指定的文件中解析内容,而LoadXml()则是加载有xml格式字符串到DOM对象中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/897677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号