猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!

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

uGUI出来这么久了,也一直没好好用用,主要是公司项目不用U3D。昨晚用了下Button,还是比较爽的。

主要说下用代码添加button.OnClick()事件的方法(使用属性面板添加的方法就不说了)

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

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

二、添加脚本

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

ok,测试一下,可以玩耍了。

================== 2015-03-07 更新 ======================

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

  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. }

================== 2016-07-19 更新 ======================

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

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

  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. // button actions
  11. protected abstract void OnClickButtons(GameObject sender);

uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)的更多相关文章

  1. 2DSprite添加Light照射(Unity3D开发之十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/45534245 ...

  2. [转]jquery append 动态添加的元素事件on 不起作用的解决方案

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

  3. jquery append 动态添加的元素事件on 不起作用的解决方案

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

  4. jquery mobile Checkbox动态添加刷新及事件绑定

    jquery mobile Checkbox动态添加刷新及事件绑定 在微信项目中,涉及到一个多选功能.数据来自后台数据库,需要动态加载. 项目结构:微信api+web app.使用jquery mob ...

  5. 用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

  6. asp.net后台代码动态添加JS文件和css文件的引用

    首先添加命名空间 using System.Web.UI.HtmlControls; 代码动态添加css文件的引用 HtmlGenericControl myCss = new HtmlGeneric ...

  7. UGUI 代码 动态添加 Event Trigger 的事件

    Additionally, if you need more than just the events provided by default, I'd suggest instead attachi ...

  8. 【Unity】用代码给按钮动态添加点击事件

    问题:多数情况下用UGUI的Button控件身上的OnClick()列表可以指明该按钮点击后触发的回调.现在想要调用自定义脚本里的方法,当这个脚本挂在Button所属的Canvas身上时,传入Canv ...

  9. jquery append 动态添加的元素事件on 不起作用问题的解决

    on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delete). 不多说看成功代码(注意加粗加色): <!DOCTYPE html PUBLIC "-//W ...

随机推荐

  1. RxJava操作符(09-算术/聚合操作&连接操作)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51692493 本文出自:[openXu的博客] 目录: 算术聚合 Count Concat ...

  2. 理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(1)--简介 本文介绍SQL Server如何编译存储过程并使用计划缓存 ...

  3. Django 是如何实现用户登录和登出机制的(默认版本-数据库版本)

    Django session 字典,保存到数据库的时候是要先序列化的(session.encode方法), 读取的时候反序列化(session.decode),这样比较安全. 一 settings.p ...

  4. C#删除WebBrowser控件的Session

    因最近做一个成绩查询导出的程序,用到webbrowser控件,该查询的网站限制一个会话只能查询3次成绩,而我要查询4000多人的成绩. using System.Runtime.InteropServ ...

  5. ubuntu挂载的NTFS文件编译失败问题

    错误: 编译Android源代码时候出现,权限拒绝的错误 解决方法: sudo apt-get install ntfs-config sudo ntfs-config 我的微信二维码如下,欢迎交流讨 ...

  6. 19 主线程向子线程发送信息(handler)

    package com.fmy.handler; import android.app.Activity; import android.os.Bundle; import android.os.Ha ...

  7. Android必知必会-带列表的地图POI周边搜索

    如果移动端访问不佳,请尝试–> Github版 2016-08-22 更新 注意:在 Activity 代码中的onPoiSearched(PoiResult result, int rCode ...

  8. Android之获取屏幕的尺寸像素及获取状态栏标题栏高度

    在Android的实际开发中,会经常用到获取屏幕的尺寸的问题,以便设置一些布局在屏幕上的固定位置,从而适配各个屏幕的设备. 今天我就来讲一下怎么得到当前设备的屏幕像素吧: 一.在Activity中: ...

  9. GDAL书籍中删除数据勘误(C#语言)

    GDAL书籍中关于C#版本删除数据的时候,不能完全删除数据,由于我对C#不了解导致代码有点问题,非常感谢@Bingoyin指出并给出修改方案.此外对于栅格图像的删除.重命名,矢量数据的删除和重命名都有 ...

  10. Linux 基于IPC机制实现进程间的共享内存处理

    今天学习了相关于IPC(InterProcess Communication ,进程间通信)的相关知识.就做个笔记,一来让大家检查一下我的理解方面是不是有错误,二来也为了能让更多的博友们了解到相关的知 ...