Unity EventTrigger 窃取 OnDrop 但不窃取 OnDrag
Unity EventTrigger steals OnDrop but not OnDrag
我在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!");
}
}
当我使用附加了此组件的游戏对象启动我的场景时,预期的日志输出是:
OnBeginDrag!
OnDrag!
...
OnDrag!
OnDrop!
只要我只有默认组件和我的组件就是这样。但是,如果我将一个 Event -> Event Trigger 组件(甚至没有在其中指定任何内容)添加到同一个 GameObject 并再次 运行 ,输出为:
OnBeginDrag!
OnDrag!
...
OnDrag!
永远不会调用 OnDrop。组件的顺序不影响任何东西。
有没有办法阻止 EventTrigger 用完 OnDrop 调用?
好吧,这已经存在很长时间了(我不记得我是什么时候发现它的,但至少在 1.5-2 年前)...
解决方法是使用 OnEndDrag
事件,因为它总是被调用(没有 EventTrigger 组件,它会在 OnDrop
之后立即被调用)。此外,这两个事件象征着完全相同的东西也是有意义的:如果一个项目没有事先开始被拖动,它就不会被丢弃。
否则,您可以 "copy" 您自己的脚本中的 EventTrigger class 行为,并可能分配 GameObject 和一个 Method (甚至 Parameters),当调用 OnDrop
时将被调用,因此您不必添加EventTrigger 组件。
希望这对您有所帮助,
我在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!");
}
}
当我使用附加了此组件的游戏对象启动我的场景时,预期的日志输出是:
OnBeginDrag!
OnDrag!
...
OnDrag!
OnDrop!
只要我只有默认组件和我的组件就是这样。但是,如果我将一个 Event -> Event Trigger 组件(甚至没有在其中指定任何内容)添加到同一个 GameObject 并再次 运行 ,输出为:
OnBeginDrag!
OnDrag!
...
OnDrag!
永远不会调用 OnDrop。组件的顺序不影响任何东西。
有没有办法阻止 EventTrigger 用完 OnDrop 调用?
好吧,这已经存在很长时间了(我不记得我是什么时候发现它的,但至少在 1.5-2 年前)...
解决方法是使用 OnEndDrag
事件,因为它总是被调用(没有 EventTrigger 组件,它会在 OnDrop
之后立即被调用)。此外,这两个事件象征着完全相同的东西也是有意义的:如果一个项目没有事先开始被拖动,它就不会被丢弃。
否则,您可以 "copy" 您自己的脚本中的 EventTrigger class 行为,并可能分配 GameObject 和一个 Method (甚至 Parameters),当调用 OnDrop
时将被调用,因此您不必添加EventTrigger 组件。
希望这对您有所帮助,