Unity实现可移植答题模块的简单实现
前言
在最近的几天里,领导交代开发一个答题功能的模块,需要很方便地移植到其他项目中。因为我之前开发过答题功能的项目,所以对这个需求也不虚,但是开发这种类似于插件的功能,我还是没有搞过的。于是我翻了翻之前的项目,看了看代码,思考了一下,感觉还是可以搞出来的,于是研究了两天,将这个可以方便移植的答题模块搞了出来,先看下效果图。
效果图1:
效果图2:
效果图3:
效果图4:
步骤一
在场景中创建一个Scroll View组件,在其子物体Content里添加两个组件,Vertical Layout Group和Content Size Fitter,如下图所示:
步骤二
在Content下创建TopicSelect物体,在下面添加几种UI组件,将其做成Prafab,结构如图所示:
步骤三
添加TopicSelectScr脚本:代码如下图所示:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
//using SUIFW;
/// <summary>
/// 一道选择题
/// </summary>
public class TopicSelectScr : MonoBehaviour
{
/// <summary>
/// 自身的考试题 需要赋值的数据
/// </summary>
public ExaminationDate examination;
/// <summary>
/// 是否选择正确,通过属性判断成绩
/// </summary>
public bool isCorrect;
//查找组件
public Text IdTxt;
public Text SubjectTxt;
public Toggle Toggle_A;
public Text Toggle_A_Label;
public Toggle Toggle_B;
public Text Toggle_B_Label;
public Toggle Toggle_C;
public Text Toggle_C_Label;
public Toggle Toggle_D;
public Text Toggle_D_Label;
public int topicId;
public Text answerText;
GameObject rootGo;
public GameObject[] toggleBackGround;
private void Awake()
{
Toggle_A.isOn = false;
Toggle_B.isOn = false;
Toggle_C.isOn = false;
Toggle_D.isOn = false;
}
/// <summary>
/// 赋值完数据之后,需要更新UI的显示,并提供题号的id
/// </summary>
/// <param name="id"></param>
public void OnChangeUIShow(int id,int FontSize=28)
{
topicId = id;
IdTxt.text = id.ToString();
SubjectTxt.text = examination.Topic;
Toggle_A_Label.text = examination.Select[0];
Toggle_A_Label.fontSize = FontSize;
Toggle_B_Label.text = examination.Select[1];
Toggle_B_Label.fontSize = FontSize;
Toggle_C_Label.text = examination.Select[2];
Toggle_C_Label.fontSize = FontSize;
Toggle_D_Label.text = examination.Select[3];
Toggle_D_Label.fontSize = FontSize;
answerText.text = examination.Analysis;
Toggle_A.onValueChanged.AddListener(TogSelectA);
Toggle_B.onValueChanged.AddListener(TogSelectB);
Toggle_C.onValueChanged.AddListener(TogSelectC);
Toggle_D.onValueChanged.AddListener(TogSelectD);
}
/// <summary>
/// 选择1
/// </summary>
/// <param name="ison"></param>
void TogSelectA(bool ison)
{
int id = 0;//该选择的判断标识
int res;
if (ison)
{
if (int.TryParse(examination.Answer, out res))//将json的正确答案对比
{
if (id == res)//判断否正确
{
isCorrect = true;
}
else
{
isCorrect = false;
}
}
}
else
{
isCorrect = false;
}
}
/// <summary>
/// 选择2
/// </summary>
/// <param name="ison"></param>
void TogSelectB(bool ison)
{
int id = 1;
int res;
if (ison)
{
if (int.TryParse(examination.Answer, out res