• 使用 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);
        }
    
    }
  • 相关阅读:
    想不明白为什么不复用老接口?
    dubbo入门教程-从零搭建dubbo服务
    使用Node.js时如何引入jQuery
    博客园在我的博客添加点击小心心特效
    博客园在微信内置浏览器打开时添加微信赞赏码功能
    Keepalived
    双网卡服务器使用指定网卡互通不同网段数据
    LNMP详解
    Centos7数据实时同步(Rsync+inotify)
    解决Centos7本机时间与实际时间相差8小时
  • 原文地址:https://www.cnblogs.com/Sakya00/p/3603372.html
Copyright © 2020-2023  润新知