1. 程式人生 > >Unity中拖動的簡單實現(UGUI以及3D物體)

Unity中拖動的簡單實現(UGUI以及3D物體)

拖動的基本程式碼如下

[RequireComponent(typeof( RectTransform))]
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class UGUIDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    private bool isDrag = false;
    //偏移量
    private Vector3 offset = Vector3.zero;

    public
void OnBeginDrag(PointerEventData eventData) { isDrag = false; SetDragObjPostion(eventData); } public void OnDrag(PointerEventData eventData) { isDrag = true; SetDragObjPostion(eventData); } public void OnEndDrag(PointerEventData eventData) { SetDragObjPostion(eventData); } void
SetDragObjPostion(PointerEventData eventData) { RectTransform rect = this.GetComponent<RectTransform>(); Vector3 mouseWorldPosition; //判斷是否點到UI圖片上的時候 if (RectTransformUtility.ScreenPointToWorldPointInRectangle(rect, eventData.position, eventData.pressEventCamera, out
mouseWorldPosition)) { if (isDrag) { rect.position = mouseWorldPosition + offset; } else { //計算偏移量 offset = rect.position - mouseWorldPosition; } //直接賦予position點到的時候回跳動 //rect.position = mouseWorldPosition; } } }

UGUI中

只需要將上面的程式碼拖到想要移動的物體上即可
場景中需要一個EventSystem,一般建立UGUI的時候會自動生成

3D物體上

需要在攝像機上加入 Physics RayCaster 元件
另外物體上需要有Collider
場景中需要一個EventSystem
將上面指令碼拖到需要拖動的物體物件上即可

擴充套件:其實我們可以繼承許多的介面,參考上面的方法可以實現許多我麼需要的效果。包括點選等等。
這裡寫圖片描述