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

时间:2017-01-19 12:23:20

标签: c# unity3d unity5

我在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”?

1 个答案:

答案 0 :(得分:0)

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

你应该使用" Input.GetButton()"而不是" Input.GetButtonDown()"。 Input.GetButtonDown()仅对按下按钮的帧返回true。

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

你的问题有点不清楚。您是否已经在任何方面获得了完全可以使用的代码,或者只是在光标从外部进入时拖动一个对象,同时按下您想知道的鼠标按钮?