1. 程式人生 > >Unity—實現滑鼠拖拽

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上。