一:界面展示
(录gif太长了,上传不了)
二:功能简述
- 点击主界面进入盲盒界面
- 点击任意一个盲盒进入答题界面,回答完一个题不需要返回,回答完一个3秒后进入下一题,一旦答对6题或答错4题,直接显示成功或失败界面(这个答对答错是可以通过代码修改的)
- 等待5秒后,返回主界面
- 点击任意盲盒的题目是不一样的,进入盲盒后,题目顺序也是不一样的,总结来说:就是盲盒中的题目不是固定的一个。
- 可以有单选题,多选题,判断题,题目数量可以内部修改,要是想做外部修改的话,加一个configDFile文件即可
三:代码梳理
主要代码:(这个是在原先的答题系统延申出来的)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Linq;
using UnityEngine;
using UnityEngine.UI;
public class Panel_Question : MonoBehaviour
{
[Header("root界面:首界面 开始答题 过度界面 答题界面 结束界面 ")]
[SerializeField] GameObject firstRoot;
[SerializeField] GameObject startRoot;
[SerializeField] GameObject answerRoot;
[SerializeField] GameObject endRoot;
[Header("按钮:前往答题界面按钮 开始答题 上一题,提交,下一题")]
[SerializeField] Button toStartRootBtn;
[SerializeField] Button submitBtn;
[SerializeField] Button[] startBtns;
[Header("正确图片,错误图片 题型图片 题型英文图片")]
[SerializeField] Image correntImg;
[SerializeField] Image defeatImg;
[SerializeField] Image QTImg;
[SerializeField] Image QTEngImg;
[SerializeField] List<Sprite> QTSprites;
[Header("文本:题目序号 解析内容 ")]
[SerializeField] Text questionID;
[SerializeField] Text analysisData;
[Header("内容scroll的content 单选scroll的content 选项scroll的content")]
[SerializeField] Transform contentScrollContent;
[SerializeField] Transform questionBtnRoot;
[SerializeField] Transform selectContent;
[SerializeField] ToggleGroup questionGroup;
[Header("正确音效 错误音效 成功音效 失败音效")]
[SerializeField] List<AudioClip> musics;
// 答题界面数据内容
private QuestionPanelData mQuestionPanelData;
// 每一道题的题目内容
private QuestionData mQuestionData;
// 题目内容物体
private GameObject mQuestion;
// 选项的链表
private List<Options> options = new List<Options>();
private List<int> randomNum = new List<int>(); //存放随机数
int index = 0;
#region 单例和初始化
static Panel_Question instance;
public static Panel_Question GetInstance()
{
return instance;
}
private void Awake()
{
Init();
instance = this;
}
#endregion
#region 按钮监听和获取随机数
private void Init()
{
//按钮监听
toStartRootBtn.onClick.AddListener(ToStartRootEvent);
submitBtn.onClick.AddListener(submitClick);
for (int i = 0; i < startBtns.Length; i++)
{
startBtns[i].onClick.AddListener(StartAnswer);
}
//获取随机数
GetRandomNum();
}
#endregion
private void Start()
{
//读取xml文件,随机出一套题库
StartCoroutine(LoadingQuesiton(DataPath.QuestionData));
//初始界面的显示与隐藏
firstRoot.SetActive(true);
startRoot.SetActive(false);
ans