【发布时间】:2016-12-13 18:57:51
【问题描述】:
假设我有一个游戏,除了几个 UI 按钮/元素之外,整个屏幕都是可交互的(即,当触摸发生在 UI 按钮之外的任何地方时,应该调用屏幕范围的触摸处理程序,而不是在发生触摸时调用在 UI 按钮上,因为在 UI 按钮上发生的触摸应该调用按钮处理程序,而不是屏幕范围的触摸处理程序)
当触摸发生在 UI 元素上时,阻止触摸事件的最佳方法是什么?
我见过多种方法...
- 将触摸脚本附加到任意游戏对象。在
Update()函数中,检查EventSystem.current.IsPointerOverGameObject(touch.fingerId)如果不为假则忽略
这似乎是最直接和灵活的,因为Update() 函数可以直接使用Input 对象
- 将触摸脚本附加到画布背面具有 0 alpha 的拉伸图像窗格,并使用
OnPointerEnter、OnPointerClick等处理触摸事件
这似乎是新 GUI 系统下推荐的方法,但似乎不太灵活,因为原始的 Input 值被 PointerEventData 屏蔽,特别是使用这种方法处理多点触控似乎很棘手(另外在画布的背景上使用拉伸的不可见图像似乎很hacky...)
- 1 和 2 的某种混合或其他方法?
由于这似乎是一件非常普遍的事情,我想知道此类问题的行业常见做法。
谢谢
相关链接:
http://answers.unity3d.com/questions/784617/how-do-i-block-touch-events-from-propagating-throu.html https://www.youtube.com/watch?v=EVZiv7DLU6E
【问题讨论】:
-
为什么要阻止对 UI 按钮的触摸?如果您解释您在做什么以及为什么应该阻止 UI 按钮单击,也许会有更好的解决方案。它通常是人们想要阻止的游戏对象,而是一个 ui 组件..
-
我的意思是当UI按钮上发生触摸时不应该调用全屏触摸脚本(因为UI按钮上发生的触摸应该调用它们自己的脚本,而不是全屏触摸脚本)。让我在问题中澄清一下
标签: android ios user-interface unity3d