首页 >Unity3D频道 >【UGUI研究院】 > UGUI研究院之判断鼠标或者手指是否点击在UI上(六)
2014
10-27

UGUI研究院之判断鼠标或者手指是否点击在UI上(六)

比如战斗场景,UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了3D部分。为了解决这个问题在判断3D响应之前要先判断手指是否点击在UI上。 以前NGUI的时候都是自己来发送射线判断,现在UGUI好了系统提供了更为简便的方法。

#if UNITY_ANDROID && !UNITY_EDITOR
#define ANDROID
#endif


#if UNITY_IPHONE && !UNITY_EDITOR
#define IPHONE
#endif



using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.EventSystems;
public class NewBehaviourScript : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	

	void Update()
	{
		if (Input.GetMouseButtonDown(0)||(Input.touchCount >0 && Input.GetTouch(0).phase == TouchPhase.Began))
		{
#if IPHONE || ANDROID
			if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
#else
			if (EventSystem.current.IsPointerOverGameObject())
#endif
				Debug.Log("当前触摸在UI上");
			
			else 
				Debug.Log("当前没有触摸在UI上");
		}
	}
}

 

这段代码我在Android上已经测试通过。 哦 我用的是unity5.1

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

UGUI研究院之判断鼠标或者手指是否点击在UI上(六)》有 64 条评论

  1. 羊咩咩说:

    雨松三三你好,5.1可用。实际应用中会有这个情况,有些ui例如按钮,需要判断是否点击在ui上。还有一些 ,例如显示信息的标签,不需要判断是否点击在ui上,如何在程序中将两者区分。
    我以前 采取的方案是 将没有图案的rectTransform覆盖至需要判断的按钮列上,然后计算出rectTransform的四个顶点坐标,通过判断鼠标是否在rectTransform的区域内来得出结果。效果很好但很麻烦。
    这里希望能得到一种更简便的方式。所以想知道 如何将需要进行判断的ui和不需要进行判断的ui区分。

  2. 范高征说:

    试了您给的链接中Android的监测方法,貌似还是不行哎,能否麻烦您写一个可行的方法?

  3. 炒饭说:

    Unity5上这个方法在真机上不好使啊,我用判断currentSelectedGameObject是否为空替代了。。。不知道是不是我的用法有问题

  4. dxw说:

    这个方法只能检测到脚本挂载在的GameObject的上方的UI,有其它GameObject遮挡就无效了。。

  5. 小火柴说:

    UGUI 如何做出鼠标经过文本UI时,出现提示信息,离开消失。

  6. 斯逗说:

    EventSystem.current.IsPointerOverGameObject()标红色啊,报错了,怎么解决呢 UGUI研究院之判断鼠标或者手指是否点击在UI上(六) - 雨松MOMO程序研究院 - 1

  7. 111说:

    用射线可以吗?

  8. zhanyue说:

    这个EventSystem.current.gameObject.name 返回的值为什么一直就是EventSystem?

  9. http://www.4yue.net/?post=116 这个方法 你看看说:

    http://www.4yue.net/?post=116这个方法 你看看http://www.4yue.net/?post=116这个方法 你看看

  10. 话说,射线 根本 检测不到 ui层,咋搞说:

    话说,射线 根本 检测不到 ui层,咋搞

  11. wugn说:

    借个帖子发个问题,雨大大,我在将一个大地形切割成若干个小地形时候,这个大地形是有光照贴图的,生成的若干个小地形需要赋值这个光照贴图的各个部分,怎么赋值呢,我找了好久没没找到怎么赋值。

      • wugn说:

        额,这个我知道,原本是的光照贴图是一张整的地形光照图,现在几个若干小地形要做个偏移什么的吧。Renderer里面有lightmapScaleOffset 和lightmapIndex。但是Terrain.lightmapIndex 就这一个属性没有 lightmapScaleOffset 光照贴图平铺偏移属性,我怎么做偏移呢? UGUI研究院之判断鼠标或者手指是否点击在UI上(六) - 雨松MOMO程序研究院 - 1

  12. licj说:

    正在把游戏中的NGUI转成UGUI,遇到了好多坑。。其中一个是新手引导中设置焦点,屏蔽其他交互的问题。NGUI中可以用Event Mask做。UGUI中找到个类似的东西,叫Graphics Raycaster,其中可以设置Block Mask。可是我发现设置了Block Mask也不起作用,并没有屏蔽其他layer,是我使用方法有问题?

  13. imtcl12说:

    需要这么麻烦吗?我用的NGUI,设置下NGUI的Camera的UI Mask就可以了啊,主摄影机的Mask去掉UI层,互不干扰的。

  14. 前辈,模拟器上市可以的,真机上还是会影响到3D部分,您知道这是什么原因吗

  15. 夏伟说:

    实现 IPointerClickHandler接口 可以实现。

  16. 请问 未来的一年的UGUI 系统能取代NGUI吗?说:

    请问 未来的一年的UGUI 系统能取代NGUI吗?

  17. hehe说:

    我的4.6b18没找到EventSystem.current.IsPointerOverGameObject()原文的 EventSystemManager.currentSystem.IsPointerOverEventSystemObject()编译通过,也切实可行。感谢momo

  18. 原来这是4.6的,怪不得查了半天手册也没找到eventsystem

  19. landye说:

    if (UICamera.lastHit.collider == null) 这样判断会更好

留下一个回复

你的email不会被公开。 必填项已用 * 标注。