Unity EventTrigger窃取了OnDrop,但没有窃取OnDrag

时间:2017-01-17 11:56:55

标签: c# unity3d unity5

我在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!

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

OnBeginDrag!
OnDrag!
...
OnDrag!

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

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

1 个答案:

答案 0 :(得分:1)

嗯,这已经存在了很长时间(我不记得我什么时候发现它,但至少在1.5-2年前)...

解决方法是使用OnEndDrag事件,因为它始终被调用(没有 EventTrigger 组件,它会在OnDrop后立即调用)。同样令人感觉的是,这些事件都象征着完全相同的事情:如果物品未事先开始被拖动,则不会被丢弃。

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

希望这有帮助,