使用 NGUI Toggle 制作单选框

      好久没写了,今天来把关于NGUI的做的简单功能发上来~

      这个是做单选框的。用了新版本的NGUI后,发现没有以前的Checkbox了,在网上查了之后才知道是用Toggle代替了以前的Checkbox。现在使用Toggle也能实现单选框的效果了(把三个Toggle的group设为同一个数字就能实现三选一),单选功能是实现了,但是选择其中一个toggle后无法取消选择(比如点击第一次就是选择状态再点一次就是取消选择),不知道是不是我的使用方法不正确~在网上找了也没找到NGUI自带的实现方法,然后就自己写了,当然要实现这个本来就不难~发过来权当笔记。

      基本的控件使用方法网上一堆教程,都写的挺好的,照着做就能把控件搭好。

      直接挂代码(比较简单没怎么注释):

using UnityEngine;
using System.Collections;

public class toggle : MonoBehaviour
{
    UIToggle[] toggles;
    int value = 0;  //单选框所代表的的值:1、2、3

    void Awake()
    {
        toggles = new UIToggle[3];
        for (int i = 0; i < 3; i++)
        {
            toggles[i] = this.transform.Find("Anchor/Panel/CheckBox/Toggle_" + (i+1)).gameObject.GetComponent<UIToggle>();
            print(toggles[i].name);

            toggles[i].gameObject.AddComponent<UIEventListener>();
            UIEventListener.Get(toggles[i].gameObject).onClick = ButtonClick;
        }

    }

    int click1 = 0;
    int click2 = 0;
    int click3 = 0;

    void ButtonClick(GameObject obj)
    {
        
        string name = obj.name;
        switch(name)
        {
            case "Toggle_1":
                click1++;
                click2 = 0;
                click3 = 0;
                if (click1 % 2 == 0)
                {
                    value = 0;
                    toggles[0].value = false;
                    GameObject sp = toggles[0].transform.FindChild("Checkmark").gameObject;
                    sp.SetActive(false);
                }
                else 
                {
                    value = 1;
                    GameObject sp = toggles[0].transform.FindChild("Checkmark").gameObject;
                    sp.SetActive(true);
                }
                break;

            case "Toggle_2":
                click2++;
                click1 = 0;
                click3 = 0;
                if (click2 % 2 == 0)
                {
                    value = 0;
                    toggles[1].value = false;
                    GameObject sp = toggles[1].transform.FindChild("Checkmark").gameObject;
                    sp.SetActive(false);
                }
                else
                {
                    value = 2;
                    GameObject sp = toggles[1].transform.FindChild("Checkmark").gameObject;
                    sp.SetActive(true);
                }
                break;

            case "Toggle_3":
                click3++;
                click1 = 0;
                click2 = 0;
                if (click3 % 2 == 0)
                {
                    value = 0;
                    toggles[2].value = false;
                    GameObject sp = toggles[2].transform.FindChild("Checkmark").gameObject;
                    sp.SetActive(false);
                }
                else
                {
                    value = 3;
                    GameObject sp = toggles[2].transform.FindChild("Checkmark").gameObject;
                    sp.SetActive(true);
                }
                break;

            default:
                break;
        }

        print(value);
    }

}
原文地址:https://www.cnblogs.com/Sakya00/p/3603372.html