关于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 }
原文地址:https://www.cnblogs.com/Yukisora/p/7043360.html