- 最后登录
- 2016-8-29
- 注册时间
- 2012-8-25
- 阅读权限
- 90
- 积分
- 23585
- 纳金币
- 20645
- 精华
- 62
|
在使用NGUI 3.5.8版本时发现 按钮点击事件可以方便的添加 EventDelegate.Add(gameObject.GetCompnent<UIButton>().OnClick,myMethod)
但是与UIEventListener.Get(go).OnClick 相比却不能传递当前的点击对象进去
于是找到 static public void Add (List<EventDelegate> list, EventDelegate ev) 此静态方法(还有一个是否只执行一次的 bool OnShot的重载函数)
使用如下方法
EventDelegate ev = new EventDelegate();
ev.methodName = "mymethod";
ev.parameters[0] = new EventDelegate.Parameter();
ev.parameters[0].obj = gameObject;
EventDelegate.Add(gameObject.GetCompnent<UIButton>().OnClick,ev);
结果发现 编译器报parameters 参数是只读的参数错误,查找发现原脚本发现如下
public Parameter[] parameters
{
get
{
#if UNITY_EDITOR
if (!mCached || !Application.isPlaying) Cache();
#else
if (!mCached) Cache();
#endif
return mParameters;
}
}
找遍整个脚本之后 木有发现 有地方能给 mParameters 赋值,但是在反射调用(Execute (List<EventDelegate> list))函数的时候有判断参数个数结果只能自己添加了
public Parameter[] parameters
{
get
{
#if UNITY_EDITOR
if (!mCached || !Application.isPlaying) Cache();
#else
if (!mCached) Cache();
#endif
return mParameters;
}
/* 在此处添加 set*/
set
{
mParameters = value;
}
}
经测试后发现 已经能通过此方法传递参数了。
稍微补充一下 : EventDelegate 使用反射的机制调用回调方法 并且自动获取 调用函数的参数类型和参数个数,因此不必担心能否调用方法的问题,倒是UIEventListener使用代理的方式 ,局限性在于只能传递GameObject参数。
|
|