关于Unity中NGUI图片精灵响应鼠标的方法
Posted 夜黔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Unity中NGUI图片精灵响应鼠标的方法相关的知识,希望对你有一定的参考价值。
我在Unity里做NGUI的时候发现一个问题。
在Unity2D场景当中,一个精灵图片只要加上了Box Collider或者Box Collider2D,就可以相应OnMouseEnter和OnMouseExit事件,而到了NGUI里就不能响应了。
这真是一个大坑
虽然说NGUI提供了按钮组件,但是如果我们想要自己定制一个按钮的话,失效的那两个事件是不可或缺的。
在网上找了很久,我依旧没能找到相关问题的回答,是的,似乎很少有人碰到这个问题(难道是我新手的原因?)。
故私再次记录下我的解决方法。
好在身边有一本前不久买来的还没有来得及看的《Unity3D NGUI 实战教程》高雪峰编著,高先生看到这篇文章请自行缴纳广告费(逃),在里面我看到了这么一句话:只要这个控件上有BoxCollider,我们就可以在脚本中通过OnClick()、OnHover()等事件监听函数去触发一个响应事件。
桥的麻袋?OnHover()?interesting。
于是就去试了一下
1 void OnHover() 2 { 3 Debug.Log("OnHover"); 4 }
神奇的事情发生了
是的,你没有看错,两个Log。检查表示我开启了Collapse。再仔细观察可以发现当我的鼠标进入范围的时候打出第一个log,离开后打出第二个log,也就是说当鼠标进入和离开的时候都会触发一次OnHover();
于是我笑了,写了个假的OnMouseEnter()和OnMouseExit();
1 private bool isEnter = false; 2 3 void OnHover() 4 { 5 isEnter = !isEnter; 6 if (isEnter) 7 { 8 OnMouseEnter(); 9 } 10 else 11 { 12 OnMouseExit(); 13 } 14 } 15 private void OnMouseEnter() 16 { 17 Debug.Log("Enter"); 18 } 19 private void OnMouseExit() 20 { 21 Debug.Log("Exit"); 22 }
//////////////////////2017年8月3日20时34分 更新//////////////////////////////////////////////
除了上述的方法外,还有一个比较正统的方法:EvenTrigger组件
然后把脚本拖到相应的EvenDelegate里去再选择相应事件要执行的方法即可。
也可以用脚本动态的添加。
1 using UnityEngine; 2 3 namespace Assets.Scripts 4 { 5 class EvenTriggerTest:MonoBehaviour 6 { 7 UIEventTrigger ET; 8 9 private void Start() 10 { 11 ET = GetComponent<UIEventTrigger>(); 12 EventDelegate EDHoverOver = new EventDelegate(this, "MyOnHoverOver"); 13 ET.onHoverOver.Add(EDHoverOver); 14 } 15 16 private void MyOnHoverOver() 17 { 18 Debug.Log("HoverOver"); 19 } 20 } 21 }
以上是关于关于Unity中NGUI图片精灵响应鼠标的方法的主要内容,如果未能解决你的问题,请参考以下文章