2016-08-08 31 views
0

假设我有一个游戏,其中整个屏幕可以与一些UI按钮/元素相互作用(即当触摸发生在用户界面外的任何地方时应该调用全屏触摸处理程序按钮,但不会在UI按钮上发生触摸时调用,因为在UI按钮上发生的触摸应该调用按钮处理程序,而不是屏幕宽度的触摸处理程序)如何处理用户界面元素的全屏触摸交互

什么是阻止触摸事件的最佳方法当触摸发生在用户界面元素上?

我见过多种途径......

  1. 装上触摸脚本任意游戏物体。在Update()功能,检查EventSystem.current.IsPointerOverGameObject(touch.fingerId) 和忽略,如果它不是假

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

  • 附加触摸脚本来拉伸图像窗格与0阿尔法在画布的背面,并使用OnPointerEnterOnPointerClick等来处理触摸事件
  • 这似乎是在新的GUI系统下推荐的方法,但由于原始Input值被PointerEventData屏蔽,所以似乎不太灵活,特别是,处理多点触摸似乎使用此方法很棘手(也使用拉伸隐形图像在画布的背景看起来似乎很难...)

    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

    +0

    为什么要防止触摸UI按钮?如果你解释你正在做什么以及为什么应该阻止点击UI按钮,可能会有更好的解决方案。它通常是一个gameobject,人们想阻止,但用户界面组件。 – Programmer

    +0

    我的意思是,当触摸发生在用户界面按钮上时,不应该调用全屏触摸脚本(因为在用户界面按钮上触及的应该调用它们自己的脚本,而不是全屏触摸脚本)。让我在这个问题上澄清一下 – Woofas

    回答

    1

    我从来没有见过这样的使用情况。根据交互的自然映射,如果你有多点触摸交互模型,你应该在屏幕上有足够的空间,用户可以轻松地进行交互,而不会接近UI项目。否则它不是一个好的接口实现。因此,您可以使用update()(OP中的方法1)来检测点击,滑动,拖动和捏等。如果您只需要单点触摸(点按)交互,则建议使用方法2,添加背景透明面板并注册列表器onclick()。所以这一切都取决于您的交互模型的要求。

    0

    我不能胜任游戏开发帮助,但想提供一个思路考虑:

    1. 使V-触控组件空同级元素的内容。
    2. 位置是绝对充满屏幕,并添加CSS指针的事件:无
    3. 添加到它挖掘事件监听器,并只对自来水
    4. 在下方的内容添加CSS指针事件触发隐藏:所有和切换显示V-触摸点击。