android - 如何处理与 UI 元素的全屏触摸交互

标签 android ios user-interface unity-game-engine

假设我有一个游戏,除了一些 UI 按钮/元素之外,整个屏幕都是可交互的(即,当触摸发生在 UI 按钮之外的任何地方时,应该调用屏幕范围的触摸处理程序,但当触摸发生时不调用在 UI 按钮上,因为 UI 按钮上发生的触摸应该调用按钮处理程序,而不是屏幕范围的触摸处理程序)

当 UI 元素上发生触摸时,阻止触摸事件的最佳方法是什么?

我见过多种方法...

  1. 将触摸脚本附加到任意游戏对象。在 Update() 函数中,检查 EventSystem.current.IsPointerOverGameObject(touch.fingerId) 如果不为 false 则忽略

这似乎是最直接和灵活的,因为 Update() 函数可以直接使用 Input 对象

  1. 将触摸脚本附加到 Canvas 背面 0 Alpha 的拉伸(stretch)图像 Pane ,并使用 OnPointerEnterOnPointerClick 等来处理触摸事件

这似乎是新 GUI 系统下推荐的方法,但似乎不太灵活,因为原始 Input 值被 PointerEventData 屏蔽,特别是处理这种方法的多点触控似乎很棘手(而且在 Canvas 背景上使用拉伸(stretch)的不可见图像似乎很棘手......)

  1. 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 项目。否则它不是一个好的接口(interface)实现。因此,您可以使用 update()(OP 中的方法 1)来检测点击、滑动、拖动和捏合等。如果您只需要单点触摸(点击)交互,则建议使用方法 2,添加背景透明面板并注册 onclick() 监听器。所以这一切都取决于您的交互模型的要求。

关于android - 如何处理与 UI 元素的全屏触摸交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821777/

相关文章:

android - 如何在点击时滚动水平回收 View ?

java - 使用 (for) 语句从 Json 数组获取数据到 Java 中的按钮

android - 上传文件在iPhone PhoneGap中不起作用,但在android中工作正常

java - 控制自定义 Synth 外观和感觉中复选框的布局

python - 没有框架只用python制作GUI?

python - 使用 Perl TK 或 Python Tkinter 的自定义窗口

android-volley - 启用 ProGuard 规则时 Gson 解析不起作用

android - ListView 滞后;缓存文件有问题吗?

iOS Storyboard - TableView 嵌入在具有动态高度的容器中

ios - 将 mobileprovision 文件添加到 Xcode