鼠标拖拽好像只能用于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上。