查看: 7933|回复: 1
打印 上一主题 下一主题

[其他] NGUI EventDelegate 传递参数的方法

[复制链接]

9903

主题

126

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
53464
精华
316

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2014-11-22 01:28:37 |只看该作者 |倒序浏览
在使用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参数。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-11-22 02:10:40 |只看该作者
good to learn
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-16 08:36 , Processed in 0.085503 second(s), 33 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部