【问题标题】:Unity EventTrigger steals OnDrop but not OnDragUnity EventTrigger 窃取 OnDrop 但不窃取 OnDrag
【发布时间】:2017-01-17 11:56:54
【问题描述】:

我在 Unity 中编写了自己的组件,它实现了 IBeginDragHandler、IDragHandler 和 IDropHandler。我想添加一个 UnityEngine.UI 附带的 EventTrigger 组件,但是当我添加它时,我停止在我的组件上调用 OnDrop。照常调用 OnBeginDrag 和 OnDrag。

我的组件代码:

public class MyComponent : MonoBehaviour, IBeginDragHandler, IDragHandler, IDropHandler
{
    public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log("OnBeginDrag!");
    }

    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("OnDrag!");
    }

    public void OnDrop(PointerEventData eventData)
    {
        Debug.Log("OnDrop!");
    }
}

当我使用附加此组件的 Game 对象开始我的场景时,预期的日志输出是:

OnBeginDrag!
OnDrag!
...
OnDrag!
OnDrop!

只要我只有默认组件和我的组件就是这种情况。但是,如果我将 Event -> Event Trigger 组件(甚至没有在其中指定任何内容)添加到同一个 GameObject 并再次运行,则输出为:

OnBeginDrag!
OnDrag!
...
OnDrag!

永远不会调用 OnDrop。组件的顺序不会影响任何事情。

有没有办法阻止 EventTrigger 用完 OnDrop 调用?

【问题讨论】:

    标签: c# unity3d unity5


    【解决方案1】:

    这个已经在这里很久了(我不记得我是什么时候找到的,但至少是 1.5-2 年前)...

    一种解决方法是使用OnEndDrag 事件,因为它总是被调用(没有EventTrigger 组件,它会在OnDrop 之后立即调用)。此外,这两个事件都象征着完全相同的东西,这也是有道理的:如果一个项目没有事先开始被拖动,它就不会被丢弃。

    否则,您可以在自己的脚本中“复制” EventTrigger 类行为,并可以分配 GameObjectMethod(以及甚至 Parameters) 将在调用 OnDrop 时调用,因此您不必添加 EventTrigger 组件。

    希望这会有所帮助,

    【讨论】:

    • 使用 EndDrag 确实解决了问题,谢谢!您知道 Unity 开发团队是否已收到此通知?
    • @Helena 不是 100% 肯定,但我想我在 Unity 论坛上看到了一个帖子,开发人员回答了这个问题,所以我认为他们知道这一点。但是不确定是否已经填写了错误报告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2018-01-04
    • 2017-01-25
    • 1970-01-01
    • 2013-11-29
    • 2011-05-09
    相关资源
    最近更新 更多