VR开发-按钮实现答题篇

一、按钮实现答题功能

1、导入pico的SDK,建立一个Canvas,用作存放所有题目的面板,设置如图两处:①修改Canvas的空间和事件相机②挂上PICO的SDK中的UI交互脚本

在后面创建的每一个题目的Canvas将自动继承父亲Canvas的脚本,所以字Canvas上面都不需要做出这两项改变了

2、创建题目的Canvas,挂上脚本组件和Image(存放题目图片)组件

 代码脚本

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

public class AnswerManager : MonoBehaviour
{
    public GameObject CorrectShow;//存放下一个按钮
    public int RightKey;                  //正确答案下标
    public List<Button> KeyButtons;       //答案集合
    public static bool answerEnd = false;//修改:答题结束标志
    public GameObject endButton; //结束观看按钮

    void Start()
    {
        AddAnswer();//增加绑定此题的三个按钮的按钮函数
    }
    //答题选择
    public void SelectEvent(int index)
    {
        if (RightKey == index)                 //答对事件
        {
            //不需要显示图片KeyButtons[index].transform.parent.GetComponent<Image>().enabled = false;//按钮图片消失
            StartCoroutine(Answer());

        }
        else                                    //答错事件
        {
            KeyButtons[index].onClick.RemoveAllListeners(); //移除所按按钮的按钮函数
            StartCoroutine(Answerlost(KeyButtons[index].transform.parent.gameObject, index));//然后重新添加此按钮的按钮函数
        }
    }
    //给按钮绑定事件,第一题的第一个按钮绑定的参数为0,第二个按钮绑定为1.....
    public void AddAnswer()                 
    {
        KeyButtons[0].onClick.AddListener(delegate
        {
            SelectEvent(0);
        });
        KeyButtons[1].onClick.AddListener(delegate
        {
            SelectEvent(1);
        });
        KeyButtons[2].onClick.AddListener(delegate
        {
            SelectEvent(2);
        });
    }
    IEnumerator Answerlost(GameObject obj, int n)//答案ui关闭
    {
        yield return new WaitForSeconds(0.1f);
        //重新增加按钮函数
        obj.GetComponentInChildren<Button>().onClick.AddListener(delegate
        {
            SelectEvent(n);
        });
    }
    IEnumerator Answer() //答对,全部消失事件         
    {
        for (int i = 0; i < KeyButtons.Count; i++)
        {
            KeyButtons[i].enabled = false;//设置按钮不可见
        }
        yield return new WaitForSeconds(2f);
       
        for (int i = 0; i < KeyButtons.Count; i++)//所有按钮的父物体不可见
        {
            KeyButtons[i].transform.parent.gameObject.SetActive(false);
        }   

        //this.gameObject.SetActive(false);//将上面注释更改为下面
        if (CorrectShow != null)//如果下一个按钮不为null,则显示
        {
            CorrectShow.SetActive(true);
        }
        else//如果没有了下一个按钮就销毁预制体,显示结束按钮
        {
            answerEnd = true;
            this.gameObject.GetComponent<Image>().enabled = false;
            yield return new WaitForSeconds(2f);
            endButton.SetActive(true);
        }
        this.gameObject.SetActive(false); 
    }
}

3、题目选项组件

 Image父组件上面添加Image组件,添加透明图片

 Image子组件中,添加Image(存放选项的图片)组件和按钮组件,其中按钮组件改变转化的方式,选中为如图所示,增加选中和点击时的效果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我想离开浪浪山去远方看看

希望所有努力和认真都有好的回馈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值