Unity中拖動的簡單實現(UGUI以及3D物體)
阿新 • • 發佈:2019-01-08
拖動的基本程式碼如下
[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
將上面指令碼拖到需要拖動的物體物件上即可
擴充套件:其實我們可以繼承許多的介面,參考上面的方法可以實現許多我麼需要的效果。包括點選等等。