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

[GUI] NGUI EventDelegate 传递参数的方法

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

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

跳转到指定楼层
楼主
发表于 2014-11-29 04:52: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-29 05:38:46 |只看该作者
Thakns for this !!!
回复

使用道具 举报

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

关闭

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

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

GMT+8, 2024-4-29 23:03 , Processed in 0.084007 second(s), 32 queries .

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

© 2008-2019 Narkii Inc.

回顶部