unity中button对象的onclick.addonclicklistener红色能不能绑定代参的函数

uGUI出来这么久了,也一直没好好用用,主要是公司项目不用U3D。昨晚用了下Button,还是比较爽的。主要说下用代码添加button.OnClick()事件的方法(使用属性面板添加的方法就不说了)一、创建2D UI Panel,添加你需要的Button。我添加了3个Button:BtnStart,BtnShop,BtnLeaderboards。二、添加脚本using&UnityE
using&System.C
using&System.Collections.G
using&UnityEngine.E
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&);
case&&BtnShop&:
Debug.Log(&BtnShop&);
case&&BtnLeaderboards&:
Debug.Log(&BtnLeaderboards&);
Debug.Log(&none&);
//&Update&is&called&once&per&frame
void&Update&()&{
}ok,测试一下,可以玩耍了。4762人阅读
第一步:通过Hierarchy面板创建button,如图
第二步:创建一个脚本名为TestClick,并定义一个名为Click的public方法
using UnityE
using System.C
public class TestClick : MonoBehaviour {
public void Click()
Debug.Log(&Button Clicked&);
第三步:选中Button ,Add Component选择TestClick
第四步:关联TestClick中的Click方法,如果
然后运行,我们就能看到绑定的事件了
总结一下:需要script的object,这些script就只管控制这些变化,成为一个个方法,用C#的代码来实现。如果调用的话,是需要的按钮,或者控件上面的OnClick事件上面绑定好就行了,一个是绑定object,另外一个是选择执行的函数方法什么的。
虽然已经已经实现对Unity UI新的UI系统如何绑定事件做了大概讲解,但是弊端明显,就是每个UI元素都创建一个MonoBehavior来进行监听各个事件,显然这样做不行,下面我们来学习下利用Delegate和Event来做一个通用类UIEventListener来处理事件(不了解Delegate和Event的童鞋请自行谷歌搜索观察者模式)
using UnityE
using System.C
using UnityEngine.UI;
using UnityEngine.EventS
public class UIEventListener : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
/// &summary&
/// 定义事件代理
/// &/summary&
/// &param name=&gb&&&/param&
public delegate void UIEventProxy(GameObject gb);
/// &summary&
/// 鼠标点击事件
/// &/summary&
public event UIEventProxy OnC
/// &summary&
/// 鼠标进入事件
/// &/summary&
public event UIEventProxy OnMouseE
/// &summary&
/// 鼠标滑出事件
/// &/summary&
public event UIEventProxy OnMouseE
public void OnPointerClick(PointerEventData eventData)
if (OnClick != null)
OnClick(this.gameObject);
public void OnPointerEnter(PointerEventData eventData)
if (OnMouseEnter != null)
OnMouseEnter(this.gameObject);
public void OnPointerExit(PointerEventData eventData)
if (OnMouseExit != null)
OnMouseExit(this.gameObject);
调用部分代码
using UnityE
using System.C
using UnityEngine.UI;
public class Test : MonoBehaviour
// Use this for initialization
void Start()
Button btn = this.GetComponent&Button&();
UIEventListener btnListener = btn.gameObject.AddComponent&UIEventListener&();
btnListener.OnClick += delegate(GameObject gb)
Debug.Log(gb.name);
btnListener.OnMouseEnter += delegate(GameObject gb)
Debug.Log(gb.name);
btnListener.OnMouseExit += delegate(GameObject gb)
Debug.Log(gb.name);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10656次
排名:千里之外
(2)(2)(1)(1)(2)(1)代码求解,Button.onClick.AddListener()_unity吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:20,331贴子:
代码求解,Button.onClick.AddListener()收藏
if(pareTo(&btn_try&)==0){m_btn_try=t.GetComponent&Button&();m_btn_try.onClick.AddListener(OnButRetry);m_btn_try.gameObject.SetActive(false);}........void OnButRetry(GameObject go){Application.LoadLevel (Application.loadedLevelName);}然后就出现Assets/Scripts/GameManager.cs(59,51): error CS0123: A method or delegate `GameManager.OnButRetry(UnityEngine.GameObject)' parameters do not match delegate `UnityEngine.Events.UnityAction()' parameters
来火星时代学习unity,强大美术资源,多年游戏教学实力,20000家合作企业,毕业=就业,火星时代unity,业界精英一对一辅导,参与游戏实训项目,工作经验不再是零.
百度搜了一下,说是在 4.6 之前,Button.onClick.AddListener() 只能绑定没有参数的函数
4.6 之后允许匿名委托
应该怎么写
m_btn_try.onClick.AddListener(OnButRetry);
这句应该改成:m_btn_try.onClick.AddListener(delegate(){
OnButRetry(m_btn_try.gameObject);});
button.onClick.AddClickListener();这个方法是不是只能在Start()方法里面用?
没有传入参数。应该是(XXXX).AddListener( delegate(){OnButRetry(obj);});
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 setonclicklistener 的文章

 

随机推荐