Unity多选题功能开发


前言

新手一直不知道该怎么做一个多选题开发模块!对于文件流又不够熟悉,就只能在场景中做题目更换和分数统计。


提示:以下是本篇文章正文内容,下面案例可供参考

一、场景物体

在这里插入图片描述解释一下:

  • Dati_Multiply——整个答题模块的父物体,同时也是脚本的载体。
  • Img_DatiBackground——答题板的背景图片
  • Timu1——空物体,用来将题目和选项整合起来的,方便题目之间的切换
  • txt_Topic——题目内容
  • ToggleGroup——用于方便获取所有选项的空物体
  • A、B、C、D、E——(Toggle类型)该题的所有选项。
  • Timu2——同上
  • btn_Next——下一题按钮
    注意:题目选项数量可随意改变!

二、脚本

代码如下(示例):

using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.UI;

public class DatiMultiContrpller : MonoBehaviour
{
    //题目列表
    public List<Transform> timus = new List<Transform>();
    
    //答案列表
    public List<string> ans = new List<string>();

    //当前显示的题目序号
    public int currentTimuIndex = 0;

    //答题背景图片
    public Transform datiBg;

    //题目总数
    public int timuNum;

    //下一题按钮
    public Button btn_nextTi;
    
    //分数
    public int score = 0;

    private void Awake()
    {
        Init();
    }

    /// <summary>
    /// 初始化操作
    /// </summary>
    private void Init()
    {

        datiBg = transform.Find("Img_DatiBackground");
        timuNum = datiBg.childCount;

        //题目列表初始化
        for (int i = 0; i < timuNum; i++)
        {
            //通过依次获取子物体,进行列表添加
            timus.Add(datiBg.GetChild(i));
        }

        //答案列表初始化
        {
            ans.Add("ABCDE");
            ans.Add("ABC");
        }

        //下一题按钮初始化
        btn_nextTi = transform.Find("btn_Next").GetComponent<Button>();
        btn_nextTi.onClick.AddListener(OnNextTimuClick);
    }

    /// <summary>
    /// 下一题,控制题目显示
    /// </summary>
    public void OnNextTimuClick()
    {
        //获取当前题目的所有选项
        GetTimuAllSelections();
        //对当前题目进行正误判断
        IsRight();
        //输出一下分数
        Debug.Log(score);
        //题号++
        currentTimuIndex++;
        //禁用当前题,启用下一题
        if (currentTimuIndex >= timuNum)
        {
            //结束答题需要进行的操作
            Debug.Log("答题结束");
            btn_nextTi.enabled = false;
            return;
        }
        timus[currentTimuIndex - 1].gameObject.SetActive(false);
        timus[currentTimuIndex].gameObject.SetActive(true);
    }

    /// <summary>
    /// 获取当前题目的所有选项
    /// </summary>
    /// <param name="currentTimu"></param>
    public List<Toggle> GetTimuAllSelections()
    {
        //ToggleGroup,题目所有选项的父物体
        Transform toggleGroup;
        toggleGroup = timus[currentTimuIndex].Find("ToggleGroup");
        List<Toggle> selections = new List<Toggle>();

        for (int i = 0; i < toggleGroup.childCount; i++)
        {
            selections.Add(toggleGroup.GetChild(i).GetComponent<Toggle>());
        }
        return selections;
    }

    /// <summary>
    /// 正误判断,统计分数
    /// </summary>
    public void IsRight()
    {
        int isRight = 0;

        string currentAns = ans[currentTimuIndex];

        foreach (var item in GetTimuAllSelections())
        {

            if (item.isOn)//此项被用户选中,再判断答案中是否有此项
            {
                //判定答案中是否有这个选项,没有就直接return score,有就正确答案数量+1
                if (!currentAns.Contains(item.name))
                {
                    return;
                }
                else
                {
                    isRight++;
                }
            }
        }
        if (isRight > 0 && isRight < currentAns.Length)
        {
            score += 3;//假设答对但不全得三分
        }
        else if (isRight == currentAns.Length)
        {
            score += 5;//全对得5分
        }
    }
}



总结

其实这个还有很大的优化空间,后续在慢慢改进吧。争取把单选、多选全都整合到一起。

  1. 题目及答案的添加缺乏灵活性。每次添加题目和答案都要在场景中添加物体,修改脚本中的答案字典。
  2. 如果可以制作一个题目预制体,将题目内容,选项内容,答案全都序列化,进行动态加载,我想应该会省很多空间和时间。

2021.11.26答题功能最新版本:https://blog.csdn.net/weixin_44870508/article/details/121562464

转载注明出处:https://blog.csdn.net/weixin_44870508/article/details/110438895

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Unity2D 是一款非常流行的游戏引擎,可以用于开发各种类型的游戏,包括答题游戏。许多开发者需要一个答题系统源码来参考和学习,这里就向大家介绍一下 Unity2D 答题系统源码。 Unity2D 答题系统源码主要包括两个部分:界面设计和功能实现。界面设计包括题目展示、选项显示、计时器、得分等,这些都需要通过 Unity2D 引擎实现。功能实现涉及到游戏逻辑、数据管理、UI 交互等方面,需要开发者根据自己的需求进行设计和编写。 在使用 Unity2D 答题系统源码时,需要注意以下几点: 1. 熟悉 Unity2D 引擎,掌握常用的 2D 游戏开发技术。 2. 根据游戏规则和要求进行功能设计和实现,包括题目难度、题型、分数计算等。 3. 使用 C# 编程语言进行代码编写,包括游戏逻辑、UI 交互、数据管理等。 4. 界面设计需要考虑用户体验,如何让用户更方便、更快速地进行答题操作。 5. 确保代码的可扩展性和可维护性,方便后续的修改和维护工作。 总体来说,Unity2D 答题系统源码可以让开发者更快速地实现答题游戏功能,并且可以根据自己的需要进行修改和扩展。但是需要开发者具备一定的编程和设计技能,才能更好地使用 Unity2D 引擎进行游戏开发。 ### 回答2: Unity2D答题系统源码是一个基于Unity2D引擎开发答题游戏源码。该源码可以帮助初学者了解和掌握Unity2D的开发技巧,同时也可以作为答题游戏的基础代码,方便开发者快速进行二次开发。 该源码包含了题目的制作、难度等级的设置、计分系统、倒计时等核心功能。玩家可以通过点击正确的答案来获得积分,同时还可以利用道具来增加自己的分数和答题时间。 在该源码的开发过程中,我们需要掌握Unity2D引擎的基本知识和编程技巧,比如物体的移动、碰撞检测、动画控制等。同时还需要了解答题游戏的设计原理和玩家习惯,才能开发出适合玩家的游戏。 总之,Unity2D答题系统源码是一个重要的学习资料,它可以帮助我们深入理解Unity2D引擎的开发技巧,同时也可以作为开发答题游戏的基础代码,提高游戏开发效率和质量。 ### 回答3: Unity2D答题系统源码是一种基于Unity2D游戏引擎的答题系统源代码。它主要提供一组可定制的答题功能,包括题目类型、难度等。这个系统可以用于各种类型的测试,比如知识测试、考试、调查、竞赛等。 这个答题系统源码提供了一个完整的框架,可以方便地修改和扩展。它包含了一个用户管理系统答题系统和结果分析系统。每个用户可以注册并登录,然后选择他们想参加的测试。用户可以选择一个或多个题目类型和难度,然后开始答题。测试结束后,用户可以看到自己的得分,并可以查看自己的答案和正确答案。管理员可以在后台管理用户和测试,查看测试结果和分析报告。 这个系统的优点是,它构建在Unity2D游戏引擎的基础之上,可扩展性强,可以适应不同的需求。它还具有用户友好的界面,可以吸引用户并提供良好的参与体验。此外,这个系统源码是免费提供的,任何人都可以使用和修改它,让它更好地满足自己的需求。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值