Unity—实现鼠标拖拽

鼠标拖拽好像只能用于UI对象,暂时好像是这样的,如有误,我后面会更新。

一:NGUI实现

    NGUI的更简单,只需直接覆写OnDragRelease()方法

//拖拽结束时调用
protected override void OnDragDropRelease(GameObject surface)
{
}

什么都不用写就实现了拖拽。

二、UGUI实现

    UGUI需要实现对应的接口,以及自己更新UI对象的坐标,代码如下:

public class DragTest : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{

    // begin dragging
    public void OnBeginDrag(PointerEventData eventData)
    {
        SetDraggedPosition(eventData);
    }

    // during dragging
    public void OnDrag(PointerEventData eventData)
    {
        SetDraggedPosition(eventData);
    }

    // end dragging
    public void OnEndDrag(PointerEventData eventData)
    {
        SetDraggedPosition(eventData);
    }

    /// <summary>
    /// set position of the dragged game object
    /// </summary>
    /// <param name="eventData"></param>
    private void SetDraggedPosition(PointerEventData eventData)
    {
        var rt = gameObject.GetComponent<RectTransform>();

        // transform the screen point to world point int rectangle
        Vector3 globalMousePos;
        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(rt, eventData.position, eventData.pressEventCamera, out globalMousePos))
        {
            rt.position = globalMousePos;
        }
    }
}

代码还是比较简洁的。

需要注意的是:脚本要挂在Canvas下的Image上。

猜你喜欢

转载自blog.csdn.net/a_clear_chen/article/details/80507641