我在Unity里做NGUI的时候发现一个问题。

在Unity2D场景当中,一个精灵图片只要加上了Box Collider或者Box Collider2D,就可以相应OnMouseEnter和OnMouseExit事件,而到了NGUI里就不能响应了。

这真是一个大坑

虽然说NGUI提供了按钮组件,但是如果我们想要自己定制一个按钮的话,失效的那两个事件是不可或缺的。

在网上找了很久,我依旧没能找到相关问题的回答,是的,似乎很少有人碰到这个问题(难道是我新手的原因?)。

故私再次记录下我的解决方法。

好在身边有一本前不久买来的还没有来得及看的《Unity3D NGUI 实战教程》高雪峰编著,高先生看到这篇文章请自行缴纳广告费(逃),在里面我看到了这么一句话:只要这个控件上有BoxCollider,我们就可以在脚本中通过OnClick()、OnHover()等事件监听函数去触发一个响应事件。

桥的麻袋?OnHover()?interesting。

于是就去试了一下

     void OnHover()
{
Debug.Log("OnHover");
}

神奇的事情发生了

是的,你没有看错,两个Log。检查表示我开启了Collapse。再仔细观察可以发现当我的鼠标进入范围的时候打出第一个log,离开后打出第二个log,也就是说当鼠标进入和离开的时候都会触发一次OnHover();

于是我笑了,写了个假的OnMouseEnter()和OnMouseExit();

     private bool isEnter = false;

     void OnHover()
{
isEnter = !isEnter;
if (isEnter)
{
OnMouseEnter();
}
else
{
OnMouseExit();
}
}
private void OnMouseEnter()
{
Debug.Log("Enter");
}
private void OnMouseExit()
{
Debug.Log("Exit");
}

//////////////////////2017年8月3日20时34分 更新//////////////////////////////////////////////

除了上述的方法外,还有一个比较正统的方法:EvenTrigger组件

然后把脚本拖到相应的EvenDelegate里去再选择相应事件要执行的方法即可。

也可以用脚本动态的添加。

 using UnityEngine;

 namespace Assets.Scripts
{
class EvenTriggerTest:MonoBehaviour
{
UIEventTrigger ET; private void Start()
{
ET = GetComponent<UIEventTrigger>();
EventDelegate EDHoverOver = new EventDelegate(this, "MyOnHoverOver");
ET.onHoverOver.Add(EDHoverOver);
} private void MyOnHoverOver()
{
Debug.Log("HoverOver");
}
}
}

最新文章

  1. 前端工具之Gulp
  2. openurl 跳转
  3. 内容在某div中滚动
  4. Makefile第一讲:一个简单的Makefile
  5. linux驱动开发之GCC问题
  6. 机器学习Matlab打击垃圾邮件的分类————朴素贝叶斯模型
  7. VirtualBox 不能为虚拟电脑打开一个新的任务 可能的解决方案
  8. 警惕!MySQL成数据勒索新目标
  9. Mac新手入门使用教程 - Finder 技巧
  10. Redies安装,修配置,设置密码,
  11. Recon ASRC Conference
  12. MapReduce Partition解析
  13. Photos_2017 China MVP Community Connection
  14. Spring读取外部的资源配置文件—@PropertySource和@Value实现资源文件配置
  15. 安装babel遇到的异常
  16. js计算最大公约数和最小公倍数
  17. 【MySQL】sysbench压测服务器及结果解读
  18. 巧妙使用CSS创建可以打印的页面
  19. 【Linuc-CentOS 】通过yum安装 指定版本的nodejs
  20. java-----instanceof与getClass的区别

热门文章

  1. C语言操作符/表达式及其作用总结
  2. Android实用代码七段(三)
  3. JVM活学活用——优化springboot
  4. C语言程序设计(基础)- 第7周作业(新)
  5. [高级软件工程教学]团队Alpha阶段成绩汇总
  6. QT5.8 for embedded
  7. 学号:201621123032 《Java程序设计》第4周学习总结
  8. js 选择图片生成base64数据
  9. JAVA_SE基础——53.什么是异常?
  10. jsMath对象