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可以传递各种类型的参数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)