【问题标题】:How to handle full screen touch interaction with UI elements如何处理与 UI 元素的全屏触摸交互
【发布时间】:2016-12-13 18:57:51
【问题描述】:

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

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

我见过多种方法...

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

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

  1. 将触摸脚本附加到画布背面具有 0 alpha 的拉伸图像窗格,并使用OnPointerEnterOnPointerClick 等处理触摸事件

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

  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 按钮的触摸?如果您解释您在做什么以及为什么应该阻止 UI 按钮单击,也许会有更好的解决方案。它通常是人们想要阻止的游戏对象,而是一个 ui 组件..
  • 我的意思是当UI按钮上发生触摸时不应该调用全屏触摸脚本(因为UI按钮上发生的触摸应该调用它们自己的脚本,而不是全屏触摸脚本)。让我在问题中澄清一下

标签: android ios user-interface unity3d


【解决方案1】:

我从未见过超出您问题中描述的方法的全屏触摸用例。根据交互的自然映射,如果你有多点触控交互模型,你应该在屏幕上有足够的空间,用户可以在不靠近 UI 项目的情况下轻松交互。否则它不是一个好的接口实现。所以你可以使用update()(OP中的方法1)来检测点击,滑动,拖动和捏合等。如果你只需要单点触摸(点击)交互,那么推荐方法2,添加背景透明面板并注册@ 987654322@ 听众。所以这一切都取决于您的交互模型的要求。

【讨论】:

    【解决方案2】:

    我没有能力帮助游戏开发,但想提供一个想法供考虑:

    1. 将 v-touch 组件设为其内容的空兄弟元素。
    2. 绝对全屏并添加 CSS 指针事件:无
    3. 添加点击事件侦听器并在点击时切换隐藏
    4. 在底层内容上添加 CSS pointer-events: all 并切换 show v-touch on tap。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-26
      • 2018-10-30
      • 2019-04-08
      • 2013-12-20
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多