我在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调用?
答案 0 :(得分:1)
嗯,这已经存在了很长时间(我不记得我什么时候发现它,但至少在1.5-2年前)...
解决方法是使用OnEndDrag
事件,因为它始终被调用(没有 EventTrigger 组件,它会在OnDrop
后立即调用)。同样令人感觉的是,这些事件都象征着完全相同的事情:如果物品未事先开始被拖动,则不会被丢弃。
否则,您可以在自己的脚本中“复制” EventTrigger 类行为,并可以分配 GameObject 和 Method (和甚至参数)将在调用OnDrop
时调用,因此您不必添加 EventTrigger 组件。
希望这有帮助,