uGUI使用代码动态添加Button.OnClick()事件

21 篇文章 1 订阅

uGUI使用代码动态添加Button.OnClick()事件

原文地址: http://blog.csdn.net/cocos2der/article/details/42705885

Unity3d中的按钮响应事件:

一、创建2D UI Panel,添加你需要的Button。

我添加了3个Button:BtnStart,BtnShop,BtnLeaderboards。


二、添加脚本

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using UnityEngine.Events;  
  5. using UnityEngine.UI;  
  6.   
  7.   
  8. public class MainMenu : MonoBehaviour {  
  9.   
  10.     // Use this for initialization  
  11.     void Start () {  
  12.         List<string> btnsName = new List<string>();  
  13.         btnsName.Add("BtnPlay");  
  14.         btnsName.Add("BtnShop");  
  15.         btnsName.Add("BtnLeaderboards");  
  16.   
  17.         foreach(string btnName in btnsName)  
  18.         {  
  19.             GameObject btnObj = GameObject.Find(btnName);  
  20.             Button btn = btnObj.GetComponent<Button>();  
  21.             btn.onClick.AddListener(delegate() {  
  22.                 this.OnClick(btnObj);   
  23.             });  
  24.         }   
  25.     }  
  26.   
  27.     public void OnClick(GameObject sender)  
  28.     {  
  29.         switch (sender.name)  
  30.         {  
  31.         case "BtnPlay":  
  32.             Debug.Log("BtnPlay");  
  33.             break;  
  34.         case "BtnShop":  
  35.             Debug.Log("BtnShop");  
  36.             break;  
  37.         case "BtnLeaderboards":  
  38.             Debug.Log("BtnLeaderboards");  
  39.             break;  
  40.         default:  
  41.             Debug.Log("none");  
  42.             break;  
  43.         }  
  44.     }  
  45.       
  46.     // Update is called once per frame  
  47.     void Update () {  
  48.       
  49.     }  
  50. }  

ok,测试一下,可以了。

有人问道如果是Toogle如果添加呢?其实很简单的。

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // Add click listenner for buttons  
  2.         Hashtable btnsName = new Hashtable();  
  3.         btnsName.Add("BtnNewGame""Button");  
  4.         btnsName.Add("BtnContinue""Button");  
  5.         btnsName.Add("BtnChallenge""Button");  
  6.         btnsName.Add("BtnMoreGame""Button");  
  7.         btnsName.Add("BtnRank""Button");  
  8.         btnsName.Add("BtnMusic""Toggle");  
  9.         btnsName.Add("BtnSound""Toggle");  
  10.         foreach(DictionaryEntry btnInfo in btnsName)   
  11.         {    
  12.             GameObject btnObj = GameObject.Find(btnInfo.Key as string);    
  13.             if (btnInfo.Value == "Button") {  
  14.                 Button btn = btnObj.GetComponent<Button>();    
  15.                 btn.onClick.AddListener(delegate() {    
  16.                     // this.OnClick(btnObj);     
  17.                 });   
  18.             }  
  19.             else if (btnInfo.Value == "Toggle") {  
  20.                 Toggle btn = btnObj.GetComponent<Toggle>();    
  21.                 btn.onValueChanged.AddListener(delegate(bool isOn) {  
  22.                     // this.OnValueChanged(isOn, btnObj);  
  23.                 });  
  24.             }  
  25.         }  

我现在的做法是有一个BaseUIView,会在这里统一注册button事件,然后子类自己实现OnClickButtons函数。

当然,BaseUIView中还可以做些UI的显示和影藏的事件,然后配合UIManager使用来管理UI的显示层级问题。


[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 绑定buttons event  
  2. Button[] buttons = GetComponentsInChildren<Button> (true);  
  3. foreach (var item in buttons) {  
  4. Button btn = item;  
  5. btn.onClick.AddListener(delegate() {    
  6. this.OnClickButtons(btn.gameObject);     
  7. });   
  8. }  
  9.   
  10.   
  11. // button actions  
  12. protected abstract void OnClickButtons(GameObject sender);  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值