gpt4 book ai didi

c# - Unity EventTrigger 窃取 OnDrop 但不窃取 OnDrag

转载 作者:太空宇宙 更新时间:2023-11-03 12:34:00 27 4
gpt4 key购买 nike

我在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 之后立即被调用)。此外,这两个事件象征着完全相同的事情也是有道理的:如果一个项目没有事先开始被拖动,它就不会被丢弃。

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

希望对您有所帮助,

关于c# - Unity EventTrigger 窃取 OnDrop 但不窃取 OnDrag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com