Unity制作一套自定义选择题试卷
Unity制作一套自定义选择题试卷
如果想要实现一套自定义的试卷题目,可以参照我的这个demo。
下图结构很简单,first是第一题显示页面,second是第二题页面,UIcanvas添加UImanager脚本。
运行如图,选择答案进行下一题。
这是UImanager代码 。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UImanager : MonoBehaviour
{
private static UImanager instance;
public static UImanager Instance
{
get
{
if (instance == null)
{
instance = new UImanager();
}
return instance;
}
}
GameObject Fisrt;
GameObject Second;
List<GameObject> AllOptions = new List<GameObject>();
int Option = 0;
// Use this for initialization
private void Awake()
{
instance = this;
}
void Start()
{
Init();
}
void Init()
{
Fisrt = transform.Find("First").gameObject;
Fisrt.AddComponent<RandomOptions>();
AllOptions.Add(Fisrt);
Second = transform.Find("Second").gameObject;
Second.AddComponent<RandomOptions>();
AllOptions.Add(Second);
}
public void SetOptions(string name )
{
if (name == "Text_A")Debug.Log("您答对了");
else Debug.Log("您答错了");
AllOptions[Option].SetActive(false);
Option += 1;
if (Option < AllOptions.Count)
{
AllOptions[Option].SetActive(true);
}
}
}
这个是RandomOptions 代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class RandomOptions : MonoBehaviour
{
Transform Options;
List<int> list = new List<int>();
List<Transform> OptionsTrans = new List<Transform>();
List<Vector3> OptionsStartTrans = new List<Vector3>();
int number;
private void Start()
{
Init();
}
void Init()
{
list.Clear();
OptionsTrans.Clear();
OptionsStartTrans.Clear();
Options = transform.Find("Options").transform;
foreach (Transform item in Options)
{
OptionsTrans.Add(item);
}
for (int i = 0; i < OptionsTrans.Count; i++)
{
OptionsStartTrans.Add(OptionsTrans[i].position);
OptionsTrans[i].GetComponent<Button>().onClick.AddListener(() =>
{
UImanager.Instance.SetOptions(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
});
}
for (int i = 0; i < OptionsStartTrans.Count; i++)
{
number = RandomNumber(0, Options.childCount);
OptionsTrans[i].position = OptionsStartTrans[number];
string str = OptionsTrans[i].GetComponent<Text>().text;
string[] b = str.Split('.');
switch (number)
{
case 0:
OptionsTrans[i].GetComponent<Text>().text = "A." + b[1];
break;
case 1:
OptionsTrans[i].GetComponent<Text>().text = "B." + b[1];
break;
case 2:
OptionsTrans[i].GetComponent<Text>().text = "C." + b[1];
break;
case 3:
OptionsTrans[i].GetComponent<Text>().text = "D." + b[1];
break;
case 4:
OptionsTrans[i].GetComponent<Text>().text = "E." + b[1];
break;
case 5:
OptionsTrans[i].GetComponent<Text>().text = "F." + b[1];
break;
case 6:
OptionsTrans[i].GetComponent<Text>().text = "G." + b[1];
break;
}
}
}
int RandomNumber(int min, int max)
{
int random = Random.Range(min, max);
while (true)
{
if (!list.Contains(random))
{
list.Add(random);
break;
}
else
{
random = Random.Range(min, max);
if (list.Count >= max)
{
break;
}
}
}
return random;
}
}