NGUI之Toggle实现单选框

一:使用步骤——创建一个checkboxes

  1.首先在UI Root下建立一个Sprite,设置一张贴图,当作按钮的背景。

  

  然后为其添加碰撞组件和Toggle组件

  

  2.为第一个Sprite建立一个子Sprite,设置一张图片,当作选中的标识。

  

  将其调整到适当的位置。

  

  3.选择第一个Sprite的UIToggle组件

  

  为State Transition中的Sprite设置对象,即刚才添加的子Sprite。

以上便创建了一个checkboxes。

二:创建一个radio button groups

  1.将上面创建的checkboxes复制3个。

  2.将他们三个的UIToggle中的Group属性,都改为同一个数字,但不能是0。

  注意:UIToggle中的Starting State如果勾选的话初始状态则为选择状态。

  

单选功能是实现了,但是选择其中一个toggle后无法取消选择(比如点击第一次就是选择状态再点一次就是取消选择),不知道是不是我的使用方法不正确~在网上找了也没找到NGUI自带的实现方法,然后就自己写了

代码如下:

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class toggle : MonoBehaviour
 5 {
 6     UIToggle[] toggles;
 7     int value = 0;  //单选框所代表的的值:1、2、3
 8 
 9     void Awake()
10     {
11         toggles = new UIToggle[3];
12         for (int i = 0; i < 3; i++)
13         {
14             toggles[i] = this.transform.Find("Anchor/Panel/CheckBox/Toggle_" + (i+1)).gameObject.GetComponent<UIToggle>();
15             print(toggles[i].name);
16 
17             toggles[i].gameObject.AddComponent<UIEventListener>();
18             UIEventListener.Get(toggles[i].gameObject).onClick = ButtonClick;
19         }
20 
21     }
22 
23     int click1 = 0;
24     int click2 = 0;
25     int click3 = 0;
26 
27     void ButtonClick(GameObject obj)
28     {
29         
30         string name = obj.name;
31         switch(name)
32         {
33             case "Toggle_1":
34                 click1++;
35                 click2 = 0;
36                 click3 = 0;
37                 if (click1 % 2 == 0)
38                 {
39                     value = 0;
40                     toggles[0].value = false;
41                     GameObject sp = toggles[0].transform.FindChild("Checkmark").gameObject;
42                     sp.SetActive(false);
43                 }
44                 else 
45                 {
46                     value = 1;
47                     GameObject sp = toggles[0].transform.FindChild("Checkmark").gameObject;
48                     sp.SetActive(true);
49                 }
50                 break;
51 
52             case "Toggle_2":
53                 click2++;
54                 click1 = 0;
55                 click3 = 0;
56                 if (click2 % 2 == 0)
57                 {
58                     value = 0;
59                     toggles[1].value = false;
60                     GameObject sp = toggles[1].transform.FindChild("Checkmark").gameObject;
61                     sp.SetActive(false);
62                 }
63                 else
64                 {
65                     value = 2;
66                     GameObject sp = toggles[1].transform.FindChild("Checkmark").gameObject;
67                     sp.SetActive(true);
68                 }
69                 break;
70 
71             case "Toggle_3":
72                 click3++;
73                 click1 = 0;
74                 click2 = 0;
75                 if (click3 % 2 == 0)
76                 {
77                     value = 0;
78                     toggles[2].value = false;
79                     GameObject sp = toggles[2].transform.FindChild("Checkmark").gameObject;
80                     sp.SetActive(false);
81                 }
82                 else
83                 {
84                     value = 3;
85                     GameObject sp = toggles[2].transform.FindChild("Checkmark").gameObject;
86                     sp.SetActive(true);
87                 }
88                 break;
89 
90             default:
91                 break;
92         }
93 
94         print(value);
95     }
96 
97 }
原文地址:https://www.cnblogs.com/AaronBlogs/p/6891418.html