uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)
猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/42705885
uGUI出来这么久了,也一直没好好用用,主要是公司项目不用U3D。昨晚用了下Button,还是比较爽的。
主要说下用代码添加button.OnClick()事件的方法(使用属性面板添加的方法就不说了)
一、创建2D UI Panel,添加你需要的Button。
我添加了3个Button:BtnStart,BtnShop,BtnLeaderboards。
二、添加脚本
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Events;
using UnityEngine.UI;
public class MainMenu : MonoBehaviour {
// Use this for initialization
void Start () {
List<string> btnsName = new List<string>();
btnsName.Add("BtnPlay");
btnsName.Add("BtnShop");
btnsName.Add("BtnLeaderboards");
foreach(string btnName in btnsName)
{
GameObject btnObj = GameObject.Find(btnName);
Button btn = btnObj.GetComponent<Button>();
btn.onClick.AddListener(delegate() {
this.OnClick(btnObj);
});
}
}
public void OnClick(GameObject sender)
{
switch (sender.name)
{
case "BtnPlay":
Debug.Log("BtnPlay");
break;
case "BtnShop":
Debug.Log("BtnShop");
break;
case "BtnLeaderboards":
Debug.Log("BtnLeaderboards");
break;
default:
Debug.Log("none");
break;
}
}
// Update is called once per frame
void Update () {
}
}
ok,测试一下,可以玩耍了。
================== 2015-03-07 更新 ======================
有人问道如果是Toogle如果添加呢?其实很简单的。
// Add click listenner for buttons
Hashtable btnsName = new Hashtable();
btnsName.Add("BtnNewGame", "Button");
btnsName.Add("BtnContinue", "Button");
btnsName.Add("BtnChallenge", "Button");
btnsName.Add("BtnMoreGame", "Button");
btnsName.Add("BtnRank", "Button");
btnsName.Add("BtnMusic", "Toggle");
btnsName.Add("BtnSound", "Toggle");
foreach(DictionaryEntry btnInfo in btnsName)
{
GameObject btnObj = GameObject.Find(btnInfo.Key as string);
if (btnInfo.Value == "Button") {
Button btn = btnObj.GetComponent<Button>();
btn.onClick.AddListener(delegate() {
// this.OnClick(btnObj);
});
}
else if (btnInfo.Value == "Toggle") {
Toggle btn = btnObj.GetComponent<Toggle>();
btn.onValueChanged.AddListener(delegate(bool isOn) {
// this.OnValueChanged(isOn, btnObj);
});
}
}
================== 2016-07-19 更新 ======================
我现在的做法是有一个BaseUIView,会在这里统一注册button事件,然后子类自己实现OnClickButtons函数。
当然,BaseUIView中还可以做些UI的显示和影藏的事件,然后配合UIManager使用来管理UI的显示层级问题。
// 绑定buttons event
Button[] buttons = GetComponentsInChildren<Button> (true);
foreach (var item in buttons) {
Button btn = item;
btn.onClick.AddListener(delegate() {
this.OnClickButtons(btn.gameObject);
});
}
// button actions
protected abstract void OnClickButtons(GameObject sender);
uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)的更多相关文章
- 2DSprite添加Light照射(Unity3D开发之十六)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/45534245 ...
- [转]jquery append 动态添加的元素事件on 不起作用的解决方案
用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...
- jquery append 动态添加的元素事件on 不起作用的解决方案
用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...
- jquery mobile Checkbox动态添加刷新及事件绑定
jquery mobile Checkbox动态添加刷新及事件绑定 在微信项目中,涉及到一个多选功能.数据来自后台数据库,需要动态加载. 项目结构:微信api+web app.使用jquery mob ...
- 用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?
用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...
- asp.net后台代码动态添加JS文件和css文件的引用
首先添加命名空间 using System.Web.UI.HtmlControls; 代码动态添加css文件的引用 HtmlGenericControl myCss = new HtmlGeneric ...
- UGUI 代码 动态添加 Event Trigger 的事件
Additionally, if you need more than just the events provided by default, I'd suggest instead attachi ...
- 【Unity】用代码给按钮动态添加点击事件
问题:多数情况下用UGUI的Button控件身上的OnClick()列表可以指明该按钮点击后触发的回调.现在想要调用自定义脚本里的方法,当这个脚本挂在Button所属的Canvas身上时,传入Canv ...
- jquery append 动态添加的元素事件on 不起作用问题的解决
on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delete). 不多说看成功代码(注意加粗加色): <!DOCTYPE html PUBLIC "-//W ...
随机推荐
- Scheme r5rs letrec的用法
说明,这是r5rs的用法. (letrec ((<variable> <init>) ...) <body>) 假设((<variable> <i ...
- MySQL注释中的sql也可能执行
MySql支持三种注释形式:# 和–属于单行注释,注释范围为该行的结尾:/* */注释属于多行注释,此外该种注释还可以实现行内注释.具体的使用情况如下图中所示(四种使用情形): 除此之外,/* */这 ...
- Dynamics CRM2016 使用web api来创建注释时的注意事项
在使用wei api 创建注释的时候,有个字段需要注意下,就是下面图中的objectid字段,虽然它是个查找字段,但不能像普通的查找字段property@odata.bind来赋值 上代码,注意看倒数 ...
- Gradle 1.12用户指南翻译——第五十二章. Maven 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...
- Android自定义控件及自定义属性
Android自定义控件及自定义属性 自定义控件 创建自定义控件 自定义一个类,继承View 继承View还是哪个类,取决于你要实现一个什么样的控件 如果你要实现的是一个线性布局的组合控件,就可以继承 ...
- 模拟DbUtils实现接口回调机制
想必大家都用过apache 的DbUtils吧,这个简单的对JDBC的封装小框架真的是非常非常的适合新手的学习呢.逻辑上也不是很复杂,难度刚刚好. 下面我就模仿它来实现一个字符串的处理小框架. 思路 ...
- RxJava在Android中使用场景详解
RxJava 系列文章 <一,RxJava create操作符的用法和源码分析> <二,RxJava map操作符用法详解> <三,RxJava flatMap操作符用法 ...
- Android透明动画
Android透明动画 核心方法 public void startAnimation(Animation animation) 执行动画,参数可以是各种动画的对象,Animation的多态,也可以是 ...
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...
- C++中const加强
demo // C语言中的const是一个冒牌货 int main() { // 好像a是一个常量 const int a = 10; int *p = NULL; p = (int *)&a ...