Unity制作一套自定义选择题试卷_unity选择题制作-程序员宅基地

技术标签: c#  unity  游戏引擎  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;
	}
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38746716/article/details/122011895

智能推荐

blender中文三维立体文字制作方法_blender怎么做立体字-程序员宅基地

文章浏览阅读2w次。启动blender后使用左侧工具栏;“Create”创建 → “Text”文本 ;选中刚刚创建的text,点击键盘tab键,或者调整到编辑模式,或者在对象目录树中选中刚刚创建的text对象;这时候变为可编辑状态,英文字母或者数字可以直接输入,输入后左下角会出现insert text的对话面板;中文无法在blender中直接输入,所以要打开一个记事本,输入中文,然后复制中文,..._blender怎么做立体字

计算机网络 第二章 物理层 笔记-程序员宅基地

文章浏览阅读97次。b站 王道计算机考研 计算机网络 笔记

Vue + elementUi 实现菜单无限级的分类导航_vue 菜单分类-程序员宅基地

文章浏览阅读4.4k次。Vue + elementUi 实现菜单无限级的分类导航[ { "id": 1, "parent_id": 0, "menu_name": "第一级菜单 1", "sorting": 0, "node": [ { "id": 2, ..._vue 菜单分类

STB数据集使用-程序员宅基地

文章浏览阅读1.1k次。目录STB数据集一. 数据集简介二. 数据集的使用三. 参考文献STB数据集一. 数据集简介数据介绍STB数据集来源于这篇论文:A hand pose tracking benchmark from stereo matching.数据集内容:Our stereo hand pose benchmark contains sequences with 6 different b..._stb数据集

Qt QString:常用成员函数总结_qstring replace-程序员宅基地

文章浏览阅读1.1k次。在这个例子中,"%1" 被 "time" 替换,"%2 被 "2019-5-30" 替换,"%3" 被 "value" 替换,而 "%4" 被 25.8 替换。如果是默认10进制,而字符串非纯数字,最终转换int的结果为0。上面的函数 trimmed() 是去掉字符串前后的 ASCII 字符 '\t', '\n', '\v', '\f', '\r' 和 ' '。若需要过滤掉字符串两端的空白符('\t', '\v', '\f', '\r', '\n', 和' '),可以使用 trimmed() 函数。_qstring replace

量化交易:止盈策略与回测_量化交易回测-程序员宅基地

文章浏览阅读556次。用代码表示大跌时买入,达到目标收益率时清仓,并回测输出收益率。_量化交易回测

随便推点

微信小程序wxss使用var变量_wxss var-程序员宅基地

文章浏览阅读7.7k次。开始用:root {}发现没有效果,后来查了下需要改成 page{} 就可以了:page {--ion-color-:red;}.var-color{ color: var(--ion-color-);}_wxss var

java内存管理-程序员宅基地

文章浏览阅读400次。首先我们要明白一点,我们所使用的变量就是一块一块的内存空间!!一、内存管理原理:在java中,有java程序、虚拟机、操作系统三个层次,其中java程序与虚拟机交互,而虚拟机与操作系统间交互!这就保证了java程序的平台无关性!下面我们从程序运行前,程序运行中、程序运行内存溢出三个阶段来说一下内存管理原理!1、程序运行前:JVM向操作系统

不能使用 ScrollView 包裹 ListView/GridView/ExpandableListVIew_scrollview包裹列表使列表加载过长-程序员宅基地

文章浏览阅读431次。注意:官方明确禁止 ScrollView 包裹 ListView、GridView、ExpandableListVIew。因为这样会把 ListView 的所有 Item 都加载到内存中,要消耗巨大的内存和 cpu 去绘制图面。ListView 等 UI 组件自身有垂直滚动功能,也没有必要在嵌套一层 ScrollView。目前为了较好的 UI 体验,更贴近 Material Design 的设计,_scrollview包裹列表使列表加载过长

C代码快速傅里叶变换-分类和推理-常微分和偏微分方程-程序员宅基地

文章浏览阅读936次,点赞21次,收藏15次。C代码例程函数计算实现:1. 线性代数方程解:全旋转高斯-乔丹消元,LU分解前向替换和后向替换,对角矩阵处理,任意矩阵奇异值分解,稀疏线性系统循环三对角系统解,将矩阵从完整存储模式转换为行索引稀疏存储模式,稀疏系统的共轭梯度法,范德蒙矩阵,托普利茨矩阵,QR分解。2. 插值和外推:多项式,有理函数,三次样条,插值多项式的系数,双三次插值。3. 数值积分:龙伯格积分,第二个欧拉-麦克劳林求和,高斯求积和正交多项式,高斯-埃尔米特求积,高斯-雅可比求积,一元正交多项式。4. 评估函数:欧拉变换,加速序

mpvue小程序开发之 wx.getUserInfo获取用户信息授权-程序员宅基地

文章浏览阅读242次。一、背景 在使用美团的mpvue2.0框架搭建起小程序项目后,做获取用户信息时遇到一些问题:微信小程序更新api后,获取用户信息只能通过button上的绑定方法 来获取用户信息,vue上方法绑定不能直接使用,下面是修改配置mpvue的步骤vue中代码:<template> <div> <button open-type="getUserI..._小程序开发获取美团app乘车数据授权

4.2 时间增加一分钟(Python)_python 时间加分钟-程序员宅基地

文章浏览阅读1.1k次。时间增加一分钟(Python)_python 时间加分钟

推荐文章

热门文章

相关标签