最近在处理NGUI升级3.0的事宜,发现NGUI这次升级变化挺大的。
之前在NGUI2.X中很多处理事件的代码是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void Start () { TweenScale tweenpos = gameObject.AddComponent<TweenScale>(); tweenpos.onFinished =OnFinished; tweenpos.from = transform.localScale; tweenpos.to = new Vector3(1.2f,1.2f,1.2f); tweenpos.duration = 0.2f; tweenpos.Play(true); } void OnFinished (UITweener tween) { } |
很抱歉,如果你升级到了NGUI3.0,那么你会收到一个错误。
Cannot convert method group OnFinished' to non-delegate type
System.Collections.Generic.List<EventDelegate>’. Consider using parentheses to invoke the method
于是去官网查了一下,发现NGUI对原有的事件进行了一次更新,需要写成这样。
1 2 3 4 5 6 7 8 9 10 11 12 |
void Start () { TweenScale scale = GetComponent<TweenScale>(); EventDelegate.Add (scale.onFinished, OnFinished); } void OnFinished () { Debug.Log(TweenScale.current.name); } |
值得注意的是,这次NGUI把所有的事件都做成了List<EventDelegate>中,如果我们需要监听事件那么需要调用EventDelegate.Add()方法,原先OnFinished可以把UITweener传入,那么现在需要使用TweenScale.current ,就是表示得到当前触发该控件的这个事件。Subscribe to built-in event delegates (like input change, tweens finishing, slider change, button click, etc) 这些都可以这样用。
UIButton可以用这种方式来做。
1 2 3 4 5 6 7 |
UIButton button = gameObject.GetComponent<UIButton>(); EventDelegate.Add(button.onClick, delegate() { Debug.Log(UIButton.current.name); }); |
但是UIImageButton还不行,所以咱是还是用老的方式来处理。
1 2 3 4 5 6 7 |
UIImageButton imageButton = gameObject.GetComponent<UIImageButton>(); UIEventListener.Get(imageButton.gameObject).onClick = delegate(GameObject go ) { Debug.Log(go.name); }; |
OK,目前这样工程就不报错了,继续come on!!
- 本文固定链接: https://www.xuanyusong.com/archives/2460
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
松哥,请问有没有ngui2.6升级到3.x的相关教程,网上看了一下有的还用到了ngui的升级工具,求正确升级教学
麻烦点, 直接升级 然后在找错误吧。。我那时候也是这么升级的。。
额,那工具我找到了,是ngui3.x自带的,= =,坑死我了。 那个我问详细点,松哥你是怎么升级的,我现在升级没有删掉原来的ngui,然后导入新的3.x ngui时,没有反应,Unity菜单栏上的ngui按钮显示的还是2.6的模式,以前升级2.x直接导入都没这个问题,
雨松兄,最近在用NGUI3.0.7f1时遇到一个很诡异的问题。在做ScrollView控件时,动态添加子item。而只有最后一个item会响应自身的点击事件。其他的没反应,(只响应UIPanel的拖动,如果在调试前将其rigid组件删除,调试时UIPanel会自动添加,但此时所有item都不响应自身点击事件了)最后发现如果在控件的根节点下挂一个空物体,item居然响应正常了。哎~莫名其妙的。还不如2.3那会的Draggable Panel好用呢。
请教,如果TweenScale scale = GetComponent(); EventDelegate.Add (scale.onFinished, OnFinished);中的方法名OnFinished是在别的组件脚本上,那么该如何写呢?让你见笑了,小弟新手,请解答下,谢谢。
雨松momo您好,最近遇到一个问题,想向您请教一下:就是用Unity3d连接Oracle数据库。我看过您的篇文章,unity3d连接MySql数据库,也成功了。但最近有一个项目需要连接上Oracle数据库,一直没有试验成功。。。单纯的在C#环境下是能连接成功的(我请做C#的同事帮忙的),但是在unity3d环境下,总是提示:OracleException:ORA-12154:TNS:无法解析指定的连接标识符。试了很多办法,还是没有搞定,不知道您的邮箱,只能在这留言了,谢谢!
遇到问题了momo,是这样滴。有A,B两个动画,A动画是攻击动画,B动画是待机动画。使用老动画系统。现在我控制执行完A动画之后,用CrossFade到待机动画。可是,一点效果都没有。还是生硬的回到B待机动画了。请问这是为毛啊!!!!!!!!!!!!
雨松兄,你好。实现一个需求遇到问题特来请教:改变贴图的颜色。因为要改变颜色, 而unity只提供了RGB值, 所以先从RGB值转到HSL,再把其中的H值更改后再转回RGB再赋给贴图,但获取贴图的像素GetPixels()规定贴图的格式必须是ARGB32等一些格式,但这些格式的贴图占用内存比较大,所以就想着载入的时候用的是压缩的贴图,等改变颜色的时候再改变贴图的格式,在网上找了一大圈,都没找到方法,特来请教下,希望能得到解答,谢谢。
多出点NGUI 3.x的教程吧!
MOMO大老爷,在Unity3D频道和【NGUI研究院之Unity插件】的页面都看不到这文章,要在首页才能看到。
恩,已经在研究了!
好的,记下了
研究下4.3的2D吧。
哈哈,好久不更新文章了,忙什么了啊???
已阅
第一个,哈哈,一直都在看你的文章,还介绍给我公司同事看,Momo老师,有没有官方第三人称的注解文章,或者有没有看过这种帮助资料啊,看的我晕死了
第三人称脚本的注解文章