Unity 单击外部对象,在顶部开始拖动



我正在 Unity 中实现一个 IDragHandler,我不仅希望在触摸对象时能够开始拖动对象,而且如果指针在向下时从外部进入它,我还希望能够拖动对象。我的代码的核心:

public class Draggable : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler
{
    public void OnBeginDrag(PointerEventData eventData)
    {
        ...
    }
    public void OnDrag(PointerEventData eventData)
    {
        ...
    }
    public void OnEndDrag(PointerEventData eventData)
    {
        ...
    }
    public void OnPointerEnter(PointerEventData eventData)
    {
        // TODO: Don't just check mouse, take touch into account!
        if (Input.GetMouseButton(0))
        {
            this.OnBeginDrag(eventData);
        }
    }
}

所以,基本上,如果指针进入对象时指针向下,我想开始拖动它。但是,这段代码似乎只是让该对象的 EventSystem 出错,因为当执行此代码时,没有任何反应,我突然甚至无法再正常拖动对象了。

有没有办法从我缺少的 C# 脚本中手动触发"OnBeginDrag"?

我以前在创建自定义相机时遇到过这个问题。问题是您的语句"if(Input.GetMouseButton(0))"如果在触发事件之前按住鼠标按钮,则不会返回true。与我认为合乎逻辑的相反,"if(Input.GetMouseButton(0))"并不意味着如果按住鼠标按钮,它意味着更像是在{stuff}然后{more stuff}时单击鼠标按钮。

您应该使用"Input.GetButton()

"而不是"Input.GetButtonDown()"。Input.GetButtonDown() 仅对按下按钮的帧返回 true。

http://answers.unity3d.com/questions/412117/do-something-while-key-is-pressed-and-held-down.html

你的问题有点不清楚。您是否让代码在任何方面都可以工作,或者只是在按住鼠标按钮时光标从外部进入时拖动对象?

最新更新