uGUI使用代码动态添加Button.OnClick()事件
2016-11-18 18:38
639 查看
uGUI使用代码动态添加Button.OnClick()事件
原文地址: http://blog.csdn.net/cocos2der/article/details/42705885Unity3d中的按钮响应事件:
一、创建2D UI Panel,添加你需要的Button。
我添加了3个Button:BtnStart,BtnShop,BtnLeaderboards。
二、添加脚本
[csharp] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
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,测试一下,可以了。
有人问道如果是Toogle如果添加呢?其实很简单的。
[csharp] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
// 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);
});
}
}
我现在的做法是有一个BaseUIView,会在这里统一注册button事件,然后子类自己实现OnClickButtons函数。
当然,BaseUIView中还可以做些UI的显示和影藏的事件,然后配合UIManager使用来管理UI的显示层级问题。
[csharp] view
plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
// 绑定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()事件
- uGUI使用代码动态添加Button.OnClick()事件
- uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)
- uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)
- Unity UGUI 动态添加Button.OnClick()事件
- UGUI中Button和Toggle 添加动态事件
- UGUI中使用代码动态绑定触发事件
- UGUI代码添加带参数的Button事件
- 使用jQuery的.on()为程序动态添加的代码添加事件
- 使用js动态添加点击事件时,click与onclick的区别
- 【Unity】UGUI怎么动态的添加按钮的OnClick点击事件
- 怎样用后台代码添加Button的OnClick事件
- 使用js动态添加点击事件时,click与onclick的区别
- 使用javascript动态添加onclick事件,
- unity3D 在UGUI中动态添加button的监听事件
- UGUI动态添加Button点击事件
- UGUI 代码 动态添加 Event Trigger 的事件
- 使用js动态添加点击事件时,click与onclick的区别
- UGUI中使用代码动态绑定触发事件
- 使用javascript动态添加onclick事件