zoukankan      html  css  js  c++  java
  • 关于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 }
  • 相关阅读:
    数据库事务的特性以及隔离级别
    非受检异常(运行时异常)和受检异常的区别等
    在测试crontab执行脚本的时候,修改了linux的系统时间,crontab不执行了。
    perl的foreach循环的坑
    javascript中快速求数组的全部元素的相加之和
    js 百度地图
    PHP 取前一天或后一天、一个月时间
    php截取字符串函数
    js jquery 基本元素操作
    PHP 替换标签和标签内的内容
  • 原文地址:https://www.cnblogs.com/Yukisora/p/7043360.html
Copyright © 2011-2022 走看看