void Update()
{  if(IsTouchedUI())  {  Debug.Log("当前触摸在UI上");  }  else  {  Debug.Log("当前没有触摸在UI上");  }
}
void OnMouseDown()
{  if(IsTouchedUI())  {  Debug.Log("当前触摸在UI上");  }  else  {  Debug.Log("当前没有触摸在UI上");  }
}  bool IsTouchedUI()
{  bool touchedUI = false;  if (Application.isMobilePlatform)  {  if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))  {  touchedUI = true;  }  }  else if (EventSystem.current.IsPointerOverGameObject())  {  touchedUI = true;  }  return touchedUI;
}  

现在我们只需要在没有触摸UI的时候进行射线检测或者其他操作就行了。

在Android机上进行UI防止穿透,写了一套全平台通用的代码如下。

  void OnMouseDown()  {  if(!IsPointerOverGameObject(Input.mousePosition))  {  //没有点击UI
        }  }   public bool IsPointerOverGameObject(Vector2 screenPosition)  {  //实例化点击事件  PointerEventData eventDataCurrentPosition = new PointerEventData(UnityEngine.EventSystems.EventSystem.current);  //将点击位置的屏幕坐标赋值给点击事件  eventDataCurrentPosition.position = new Vector2(screenPosition.x, screenPosition.y);  List<RaycastResult> results = new List<RaycastResult>();  //向点击处发射射线
        EventSystem.current.RaycastAll(eventDataCurrentPosition, results);  return results.Count > 0;  }  

我们将IsPointerOverGameObject统一修改为自己重载的方法,然后传进去Input.mouseposition 就可以了。

原文链接:http://blog.csdn.net/yupu56/article/details/54561553

转载于:https://www.cnblogs.com/Study088/p/7903157.html

unity 中的UGUI 屏蔽鼠标穿透相关推荐

  1. Unity中的UGUI源码解析之事件系统(9)-输入模块(下)

    Unity中的UGUI源码解析之事件系统(9)-输入模块(下) 接上一篇文章, 继续介绍输入模块. StandaloneInputModule类是上一篇文章介绍的抽象类PointerInputModu ...

  2. Unity中的UGUI源码解析之事件系统(2)-EventSystem组件

    Unity中的UGUI源码解析之事件系统(2)-EventSystem组件 今天介绍我们的第一个主角: EventSystem. EventSystem在整个事件系统中处于中心, 相当于事件系统的管理 ...

  3. Unity中的UGUI源码解析之事件系统(8)-输入模块(中)

    Unity中的UGUI源码解析之事件系统(8)-输入模块(中) 接上一篇文章, 继续介绍输入模块. Unity中主要处理的是指针事件, 也就是在2d平面上跟踪指针设备输入坐标的的事件, 这一类事件有鼠 ...

  4. Unity中的UGUI源码解析之事件系统(6)-RayCaster(下)

    Unity中的UGUI源码解析之事件系统(6)-RayCaster(下) 接上一篇文章, 继续介绍投射器. GraphicRaycaster GraphicRaycaster继承于BaseRaycas ...

  5. Unity中的UGUI源码解析之事件系统(3)-EventData

    Unity中的UGUI源码解析之事件系统(3)-EventData 为了在事件系统中传递数据, Unity提供了EventData相关的类来封装这一类数据. 了解这些结构有助于我们对后面模块的学习. ...

  6. Unity中的UGUI屏幕适配

    本文分享Unity中的UGUI屏幕适配 屏幕适配一直是一个老生常谈的问题, 虽然只是项目一开始的时候会用到, 但是还是有很多东西需要学习和了解, 今天给大家分享下一些个人的学习和总结. 各种坐标 屏幕 ...

  7. Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement

    Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement 在上一篇文章中, 我们对整个Graphic部分做了概述, 这篇文章我们介绍ICanvasElement和 ...

  8. 关于Unity中的UGUI优化,你可能遇到这些问题

    一.界面制作 Q1:UGUI里的这个选项 ,应该是ETC2拆分Alpha通道的意思,但是在使用中并没起作用?请问有没有什么拆分的标准和特别要求呢? 据我们所知,alpha split 的功能最初只对 ...

  9. ugui unity 取消选择_关于Unity中的UGUI优化,你可能遇到这些问题

    ​关键字 界面制作 ​网格重建 ​界面切换 ​加载相关 ​字体 ​ 一.界面制作 Q1:UGUI里的这个选项 ,应该是ETC2拆分Alpha通道的意思,但是在使用中并没起作用?请问有没有什么拆分的标准 ...

最新文章

  1. bzoj 1877: [SDOI2009]晨跑 (网络流)
  2. python turtle基本语法_Python 基础语法-turtle篇
  3. [Asp.net]AspNetPager分页组件
  4. SVN:安装svn进行上传和检出文件的常用命令
  5. tensorFlow13卷积神经网络发展
  6. Excel@C#.Net之单元格设置相关
  7. 推荐sqlLite管理工具.
  8. 打开Android Studio报错“Error running ***: Please select Android SDK”
  9. SQL Server更新联接概述
  10. aix创建oracle表空间,Oracle for AIX基于裸设备的表空间扩充步聚
  11. 夺命雷公狗---node.js---7fs模块初步
  12. 第24周SDAI缓解能否预测远期RA骨破坏受抑制
  13. 当你拥有足够的经验时,自然就会想到的东西---面向对象的设计原则!
  14. 【J2EE规范】什么是JNDI
  15. session的生命周期是怎样的
  16. 最新Unity 3D游戏开发学习资料集合
  17. Mybatis-Plus:Sql 注入器(扩展BaseMapper)
  18. 2011-11-27神马浮云的一天
  19. 论文笔记——HDD算法:异构网络中信息扩散的深度学习方法
  20. 解决“ImportError: cannot import name ‘_validate_lengths‘”问题

热门文章

  1. 用Microwindows(Nano-X)编写“hello world”
  2. 数据库设计新手容易掉进的陷阱(不断更新中)
  3. python set()函数讲解
  4. python3(十一)内置模块和类型转换
  5. csdn-markdown 编辑器
  6. 50万块钱,在哪个银行存钱最合适?
  7. 北京某打工子弟学校之二
  8. SCSI、FC、iSCSI三大协议概述
  9. 华科考研834计算机网络,2018年华中科技大学834计算机专业基础综合 (模)...
  10. python列表切片后得到剩余列表_python列表切片和嵌套列表取值操作详解