【问题标题】:OnPointerHold interference with Scroll Rect scrollingOnPointerHold 干扰 Scroll Rect 滚动
【发布时间】:2016-02-18 00:37:56
【问题描述】:

我的问题的简化示例 - 我使用 Unity UI 创建以下内容:

一个大面板,包含一系列较小的面板。我已将 Scroll Rect 附加到容器游戏对象,从而使较小的面板可以水平滚动。没问题,一切正常。

但是,我为每个较小的面板附加了一个脚本,它实现了 OnPointerHold 接口。现在,当我尝试滚动浏览较小的面板时,会触发 OnPointerHold 事件,由于某种原因阻止滚动。

关于为什么会发生这种情况的任何想法?

我的真实情况是我需要一个可滚动的图像列表,如果玩家点击并按住它们,可以将其拖到场景中。我正在使用 OnPointerHold 来检测点击并按住 - 如果 0.7 秒过去了,那么让玩家拖动图像。但是,我仍然希望播放器能够滚动列表。我愿意接受有关如何实现这一目标的其他建议。

提前致谢,继续努力!

【问题讨论】:

  • 我不认为这是一个好主意,因为想象用户正在非常缓慢地拖动其中一张图像 - 0.7 秒过去了,他开始拖动但他不想要它。但是要解决这个问题,只需在滚动矩形显着改变位置时取消拖动操作。

标签: unity3d


【解决方案1】:

您只需要实现IPointerDownHandlerIPointerUpHandler 接口。只要您不实现拖动或保持处理程序,拖动和保持事件就应该直接传递给Scroll Rect

要将IPointerDownHandlerIPointerUpHandler 用于您的目的,只需计算从调用void OnPointerDown (PointerEventData eventData) 开始的时间,如果在给定时间(0.7 秒)内没有调用void OnPointerUp (PointerEventData eventData),则从@987654328 移出图像@ 并附加到某个画布上,并将其位置更新为指针位置。

这个解决方案也很好,因为如果你开始拖动 Scroll Rectvoid OnPointerUp (PointerEventData eventData) 将被调用,这很好,你想在给定的时间(0.7 秒)内拖动 Scroll Rect

【讨论】:

  • 非常感谢,@Jerry Switalski!你是绝对正确的, IPointerDownHandler 和 IPointerUpHandler 不会干扰 Scroll Rect 的滚动动作。我像你说的那样重写了我的代码,一切似乎都按照我想要的方式工作。
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多