Unity单选题开发

第一步

在Canvas下创建一个空物体(Dati_Single),用来挂脚本
在这里插入图片描述

第二步

在Dati_Single创建一个答题板背景图片(Img_DatiBackground)和一个下一题按钮(btn_Next)在这里插入图片描述

第三步

在答题板背景图片(Img_DatiBackgroud)下创建好你需要的所有题目和对应选项——这里也可以用预制体实例化题目,但笔者就直接创建多个物体了。在这里插入图片描述

第四步

这里注意选项名字末尾需要用数字递增答题,这样十分后面代码获取选项更方便!下面就是脚本了!首先创建一个答题控制脚本(DatiController)并挂到第一步中的空物体(Dati_Single)上,假设答对得五分

    ///答题总分
    int score = 0;
    ///下一题按钮
    public Button btn_Next;
    ///需要显示题目的索引
    public int currentTimuIndex = 0;
    ///题目集合
    public List<Transform> timus;
    ///答案集合
    public List<string> ans;
    ///配对答案字典
    ///答案配对——选中的选项的名称==ansDic[timus[currentTimuIndex]]
    ///就是选出来的toggle通过获取其名字与当前题号对应的字典中的值是否匹对(但在这之前先要判定主键是否存在)
    public Dictionary<Transform, string> ansDic;

	//初始化操作
 	private void Init()
    {
        btn_Next = transform.Find("btn_Next").GetComponent<Button>();
        btn_Next.onClick.AddListener(OnNextBtnClick);

        timus = new List<Transform>();
        for (int i = 0; i < transform.Find("Img_DatiBackground").childCount; i++)//列表元素个数等于这个物体的子物体数
        {
            timus.Add(transform.Find("Img_DatiBackground/Timu" + (i + 1)));//添加其下所有子物体到列表中
        }

        {
            //答案列表赋值
            ans = new List<string>();
            ans.Add("Sele_1");
            ans.Add("Sele_1");
            ans.Add("Sele_3");
        }

        //题目、答案进行字典配对
        ansDic = new Dictionary<Transform, string>();
        for (int i = 0; i < transform.Find("Img_DatiBackground").childCount; i++)
        {
            ansDic.Add(timus[i], ans[i]);
        }

        //默认激活第一道题
        timus[0].gameObject.SetActive(true);
    }	   

第五步

我们需要对下一题按钮进行事件注册,并且还需要两个方法——一个获取当前显示的题目的所有选项,另一个判断答题的正确性并进行分数统计!

	private void OnNextBtnClick()
	{
		//获取当前显示题目的选项
		//计算分数
		//切换题目
	}
	/// <summary>
    /// 哪个被勾选,然后通过题目列表的序号对应勾选的toggle名字进行匹对,匹配即正确
    /// </summary>
    /// <returns></returns>
	private Toggle[] GetCurrentTimuToggle()
	{
		//返回获取到的当前题目的所有选项————这里也可以改用列表
	}
	/// <summary>
    /// 分数处理及得分计算
    /// </summary>
    /// <returns></returns>
	private int CalculateScore()
	{
		//计算分数并返回
	}

第六步

上面三个代码具体实现

    private void OnNextBtnClick()
    {
        //初始化当前题目的所有选项
        GetCurrentTimuToggle();
        //在加载下一题之前进行分数计算
        Debug.Log(CalculateScore());
        //题号索引自增
        currentTimuIndex++;
        //当前题目编号对题目总数取余
        int showIndex = currentTimuIndex % timus.Count;

        if (currentTimuIndex>=timus.Count)
        {
            btn_Next.enabled = false;
            Debug.Log("答题结束");
        }

        if (currentTimuIndex > transform.Find("Img_DatiBackground").childCount - 1) return;
        try
        {
            timus[currentTimuIndex - 1].gameObject.SetActive(false);
            timus[currentTimuIndex].gameObject.SetActive(true);
        }
        catch (System.IndexOutOfRangeException)
        {
            Debug.Log("数组越界");
        }
    }
	/// <summary>
    /// 哪个被勾选,然后通过题目列表的序号对应勾选的toggle名字进行匹对,匹配即正确
    /// </summary>
    /// <returns></returns>
	public Toggle[] GetCurrentTimuToggle()
    {
        Toggle[] selections = new Toggle[4];
        if (currentTimuIndex > timus.Count-1) return null;
        Transform toggleGroup = timus[currentTimuIndex].Find("ToggleGroup").GetComponent<Transform>();
        for (int i = 0; i < toggleGroup.childCount; i++)
        {
            selections[i] = toggleGroup.Find("Sele_" + (i+1)).GetComponent<Toggle>();
        }
        return selections;
    }
    /// <summary>
    /// 分数处理及得分计算
    /// </summary>
    /// <returns></returns>
	private int CalculateScore()
    {
        if (GetCurrentTimuToggle() == null) return score;
        foreach (var item in GetCurrentTimuToggle())
        {
            if (item!=null)
            {
                if (item.isOn)
                {
                    string seleName = item.name;
                    if (ansDic.ContainsKey(timus[currentTimuIndex]))
                    {
                        if (ansDic.TryGetValue(timus[currentTimuIndex], out string ans))
                        {
                            score=(seleName==ans ? score += 5 : score += 0);
                        }
                    }
                }
            }
        }
        return score;
    }

第七步

上效果图
下面答对分数就+5,答错不加分
在这里插入图片描述
转载注明出处:https://blog.csdn.net/weixin_44870508/article/details/110225276

!!!!另还待进一步完善!!!!!

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

  • 8
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: Unity是一款广泛使用的游戏开发引擎。它提供了可视化的编辑器界面、底层的渲染引擎以及广泛支持的插件生态系统,使得开发者可以很方便地进行游戏开发。 如果你准备参加Unity的面试笔试,你需要掌握以下方面的知识: 1. 编程语言:Unity支持C#和JavaScript语言。你需要掌握其中一种或两种编程语言,并且能够熟练应用它们。 2. 游戏设计:你需要具备游戏设计的基本知识,包括游戏流程、关卡设计、角色设计、游戏平衡等方面的知识。 3. Unity编辑器:你需要熟练掌握Unity编辑器的各种工具,例如场景编辑、组件列表、资源管理等。 4. 物理引擎:Unity包含了物理引擎,你需要熟悉它的基本概念,例如重力、力、碰撞等。 5. 动画系统:游戏中的角色动画是非常重要的一部分,你需要熟悉Unity的动画系统,包括动画控制器、状态机等。 总之,如果你想要在Unity领域取得成功,你需要在以上方面进行深入学习和掌握。如果你能够在面试笔试中展现出你的知识和技能,相信你会很快获得工作机会。 ### 回答2: Unity是当前市面上非常流行的游戏引擎,而从事Unity开发的人才需求也越来越大。在面试和笔试中,可能会涉及到Unity的相关知识和技能。下面将从Unity的四个方面进行简单介绍:游戏物体、组件、Scene和Asset以及C#语言。 1. 游戏物体 在Unity中,物体(GameObject)是游戏场景中的核心对象。而每一个场景都是由若干个物体组成,物体又是由若干个组件(Component)组成的。因此,需要了解游戏物体的各种操作和属性设置,包括名称、激活状态、位置、旋转、缩放、父子关系等。 2. 组件 组件是Unity中最常用的一种对象,也是游戏物体的一个基本组成部分。它可以改变游戏物体的行为、外观和互动方式。在Unity中,可以通过添加或删除组件来更改游戏物体的属性和行为。例如,常用的组件包括:Animator、Rigidbody、Collider等。 3. Scene和Asset Scene(场景)是Unity的一个概念,是由多个游戏物体和它们的组件组成的。在进行游戏开发时,需要了解如何创建、导入和导出Scene。而Asset(资源)则是指Unity中的各种资源文件,例如:纹理、音频、3D模型、动画等。需要了解如何使用Asset Store、如何导入和设置Asset等。 4. C#语言 Unity使用C#语言作为主要的编程语言。因此,在进行Unity开发时,需要了解一些基本的C#语言语法和编程思想,包括:变量、方法、类、继承、多态、接口、委托等。此外,还需要了解一些Unity特有的API和对象模型,例如:GameObject、Component、Transform、Input、Physics等。 总体来说,对于Unity的面试和笔试,需要具备扎实的Unity框架和常用组件的运用能力,同时还能够掌握C#语言的基本知识。只有掌握了这些核心技能,才能在Unity开发中不断提升自己,并为团队和项目创造出更多价值。 ### 回答3: Unity 是一款非常流行的游戏开发引擎,其在市场上占有非常重要的地位,因此很多人选择学习和使用 Unity。如何通过 Unity 的面试笔试题来测试候选人的实际技能以及对 Unity 开发的理解和掌握程度呢? 对于 Unity 的面试笔试题,一般会涉及以下几个方面: 1. 编程语言和算法基础 Unity 开发主要使用 C# 语言,因此需要候选人具备扎实的 C# 基础和算法基础,包括数据结构、算法思想、设计模式等方面的知识。 2. Unity 引擎和 API 掌握程度 作为 Unity 开发者,需要掌握很多 Unity 引擎和 API 的知识,比如场景管理、游戏物体与组件、UI 界面开发、动画系统、物理引擎等。针对这些方面,笔试题目可能会让候选人通过代码实现相关功能或者回答相关问题。 3. 项目经验和实践能力 除了理论知识,实际项目经验和实践能力也非常重要。因此,笔试题目可能会涉及到一些实际场景的开发问题,比如优化性能、解决 bug、协作开发等方面。 总之,Unity 面试笔试题主要考察候选人的编程能力、Unity 引擎和 API 掌握程度以及项目实践能力。同时,需要候选人具备良好的沟通能力和团队合作精神,这对于实际开发非常重要。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值