unity5, UGUI刺穿问题解法
我希望在touch屏幕时player起跳,于是在playerControl.cs的Update函数中添加如下touch代码:
if (Input.GetMouseButtonDown (0)) {//left button down
jump ();
}
同时我在屏幕左上角加了一个实现暂停的pause按钮,用的是Unity的UI Button。
于是问题来了,当我点pause按钮想暂停时,人物同时也会起跳!
即Button响应touch消息后并没能把它拦截下来,touch消息刺穿Button到达了屏幕。
解决UGUI刺穿问题目前在所有平台都有效的办法是在屏幕响应touch前先用graphicRaycaster当前touch是否落在ui上。
举例说明如下:
假设我的项目UI部分Hierarchy如下:
在UI节点上的脚本UIcontrol.cs中实现如下函数:
using UnityEngine.EventSystems;
using System.Collections.Generic;
using UnityEngine.UI;
public bool isTouchOnUI()
{
EventSystem eventSystem = gameObject.transform.FindChild ("EventSystem").GetComponent<EventSystem> ();
Transform[] childrenTransformList = GetComponentsInChildren<Transform>();
foreach (Transform transform in childrenTransformList) {
GraphicRaycaster graphicRaycaster = transform.GetComponent<GraphicRaycaster> ();
if (graphicRaycaster&&graphicRaycaster.enabled==true) {
PointerEventData eventData = new PointerEventData (eventSystem);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;
List<RaycastResult> list = new List<RaycastResult> ();
graphicRaycaster.Raycast (eventData, list);
////Debug.Log("list.Count:"+list.Count);
if (list.Count > 0)
return true;
}
}
return false;
}
那么前面的touch代码改为:
bool isTouchOnUI=m_gameRef.transform.Find("UI").GetComponent<UIcontrol>().isTouchOnUI();
if (isTouchOnUI==false&&Input.GetMouseButtonDown (0)) {//left button down
jump ();
}
即可解决touch穿透问题。
补充:
一,一定要加if(graphicRaycaster)的判断,因为注意GameObject.GetComponentsInChildren的文档中写道:
Returns all components of Type type
in the GameObject or any of its children.
即,除了UI节点的孩子会被搜索以外,UI节点本身也会被搜索,而UI节点上不含有graphicRaycaster,所以必须先判断graphicRaycaster是否获得成功,再进行后续处理。
另外文档中还写道:
The search for components is carried out recursively on child objects, so it includes children of children, and so on.
即GameObject.GetComponentsInChildren不只是会搜索子节点,也会搜索孙节点。
二,加上graphicRaycaster.enabled==true的判断,好处是,如果我们希望某个Canvas能被刺穿,则可以将其Graphic Raycaster去掉勾选即可。
参考:http://www.cnblogs.com/fly-100/p/4570366.html
unity5, UGUI刺穿问题解法的更多相关文章
- 解决IE6下浮层遮盖select刺穿的问题
图一未解决刺穿问题: 图二已解决 解决方法使用iframe间接挡住层,具体方法见源码 源码一(未解决刺穿): <html xmlns=" ...
- leetcode 学习心得 (2) (301~516)
源代码地址:https://github.com/hopebo/hopelee 语言:C++ 301. Remove Invalid Parentheses Remove the minimum nu ...
- 2016.05.03,英语,《Vocabulary Builder》Unit 21
sub, means 'under', as in subway, submarine, substandard. A subject is a person who is under the aut ...
- 极客DIY:打造属于自己的无线移动渗透测试箱
本文中介绍的工具.技术带有一定的攻击性,请合理合法使用. 你想不想拥有一款属于自己的移动无线渗透测试箱,如果你感兴趣,下面介绍的设备将会对你很有帮助.这个箱子被称为“MiTM(中间人攻击)WiFi箱” ...
- [学习笔记]设计模式之Bridge
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 “魔镜啊魔镜,谁是这个世界上最美丽的人?”月光中,一个低沉的声音回荡在女王的卧室.“是美丽的白雪公主,她正和小霍比特人们幸福快乐地生活 ...
- Unity 白猫操作小实例
最近师兄找我说白猫的操作如何做, 0.0 结果白猫没有android的客户端玩不了,看了下视频介绍就简单做了下 效果图: 核心代码: using UnityEngine; using Syste ...
- 【转】傅盛:一家公司最大瓶颈就是CEO
创业之路,一经踏上,即永无止境.当然,对于初创期的CEO而言,还是有一些方法论可循. 来源 | 盛盛GO(ID:fstalk) 文 | 傅盛 经常有创业者问我,如何当好创业公司CEO,或如何创业,我 ...
- 用户手册是Yasm汇编
本文档的用户手册是Yasm汇编. 它是介绍和通用所有Yasm用户参考. 英文的参考:http://www.cnblogs.com/coryxie/p/3959888.html 1 .介绍 Yasm b ...
- 游戏引擎架构Note2
[游戏引擎架构Note2] 1.视觉属性(visual property)决定光线如何与物体表面产生交互作用. 2.一个Mesh所使用三角形的多少可以用细致程度(level-of-detail,LOD ...
随机推荐
- 图解SQL Server:聚集索引、唯一索引、主键
http://www.cnblogs.com/chenxizhang/archive/2010/01/14/1648042.html
- easyui-combobox绑定回车事件注意事项
回车事件的定义的位置必须是easyui-combobox数据加载的后面,才有效果. HTML文件: <select id="aucBrandNo" class="e ...
- LINUX下使用NC反弹CMDSHELL提权
很多时候linux拿到shell了,然后在菜刀或Shell里执行简单命令不允许!说明权限很死或者被管理禁止了!这里我已NC将SHELL反弹回本地提权!先看下linux内核 2.6.18-194.11. ...
- PHP之is_a()函数执行代码之总结
今天看到云舒在群里贴的漏洞公告,原始的文章在 http://www.byte.nl/blog/2011/09/23/security-bug-in-is_a-function-in-php-5-3-7 ...
- TensorFlow------读取图片实例
TensorFlow------读取图片实例: import tensorflow as tf import os def readpic(filelist): ''' 读取人物图片并转换成张量 :p ...
- ISP图像调试工程师——tone Mapping(ISP)
http://www.cnblogs.com/bigbigtree/p/3458797.html
- 解决 KendoUI TabStrip 高度 100% 问题
摘自: http://www.kendoui.com/forums/kendo-ui-web/tabstrip/forcing-tabstrip-to-take-up-100-of-it-s-pare ...
- enter 键登录的实现
js 代码 document.onkeypress = function() { var iKeyCode = -1; if (arguments[0]) { iKeyCode = arguments ...
- IT词汇表
本人采集到了数十万篇中文技术类博客,进行分词后根据出现的词频手工整理了一份IT词汇表,共计12000个,基本囊括了常见的中英文IT词汇,欢迎各位提出交流意见. 点此 下载
- 不要在基类析构函数中调用纯虚函数,否则运行时会报错“pure virtual method called”
如上. 这是因为:delete派生类对象时,先调用派生类的析构函数,然后再调用基类的析构函数:此时如果调用纯虚函数的话,派生类的对象已经被破坏了,所以会报错. http://www.cnblogs.c ...