lua如何获取ngui单击事件

lua如何获取ngui单击事件,第1张

您好,这样的:

NGUI中,Button本身就带有OnClick事件,但是Sprite,Label等( 也绑有Widget的)并没有触发事件,其实NGUI的事件触发都必须添加Box Collider,并勾选Is Trigger,在Inspector窗口设置Box大小尺寸,可以在Widget的Collider勾选auto-adjust to match。还有一个比较重要的参数需要设置正确,即是UI Root下Camera参数,在Inspector窗口中,要确定UICamera中的Event Type选择3D UI,Event Mask选择Everything。

然后添加C# Script脚本,

using UnityEngine

using System.Collections

public class SpriteClickTest : MonoBehaviour {

private UISpriteAnimation spriteAnimation

void Start()

{

spriteAnimation = GetComponent<UISpriteAnimation>()

}

void OnClick()

{

if (spriteAnimation.isPlaying) {

// 暂停动画

spriteAnimation.Stop()

} else {

// 动画重新播放

spriteAnimation.Reset()

}

}

}

在Inspector窗口

点击运行游戏,刚才设置在精灵的脚本,就会相应OnClick事件了。

确定你添加了按钮的监听事件 GameObject button = GameObject.Find("Button名称")//设置这个按钮的监听,指向 OnClick 方法。 UIEventListener.Get(button).onClick = OnClick

今天说说UIButton的点击事件,最简单的拖动就不说了,功能很鸡肋,一是不好维护,而是很多情况下我们要动态生成一些button并且对这些button回调,NGUI中封装了一个EventDelegate类用来添加回调函数,再把很多个EventDelegate封装成一个List委托链实现一对多的观察者模式。所以如果我们想让UIButton带参传递,关键是如何向EventDelegate中封装参数。

我们先看看EventDelegate的执行方法,核心代码就一句:

mMethod.Invoke(mTarget, mArgs)

显然我们在实例化EventDelegate时,至少给他一个方法名,让他的mMethod可以通过反射找到方法,至少给他一个类实例,让他知道执行哪个实例中的方法,mTarget在声明时规定MonoBehavior类型,显然我们还要给他一个组件实例,正好对应我们想要接受回调函数的那个实例。而第二个参数mArgs正是我们需要的回调参数,那我们再看看EventDelegate中是否有参数传递的相关属性或者方法。

幸运的是EventDelegate类中封装了参数类,类似通知模式通过强转Object可以传递各种类型的参数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11911055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存