UI:PointerEventData

   緣由:判斷是否將一個UI物體拖放到另外一個UI物體上面。函數

 1.拖拽實現能夠直接用EventTrigger組件或者本身實現拖拽事件的接口完成;ui

 2.在OnDrag方法中藉助PointEventData事件進行檢測;.net

 3.關於PointEventData的介紹,參考博文:https://blog.csdn.net/qq_41056203/article/details/84875282;code

 4.此次檢測主要是靠PointEventData中的pointerEnter屬性完成,該屬性會返回鼠標滑入的UI物體,返回值爲GameObject;orm

 5.由4可知須要檢測鼠標的劃入事件,就須要有Image的raycastTarget屬性,raycastTarget表明是否接收UI事件;blog

 6.當實現拖動時,將自身的Image.raycastTarget設爲false。接口

using UnityEngine.EventSystems;
using UnityEngine.UI;

[RequireComponent(typeof(Image))]//屬性,會給掛在該腳本的UI強制添加Image組件,且在沒有移除該腳本時,不能移除Image組件
public class CustomDrag : MonoBehaviour,IDragHandler,IEndDragHandler,IBeginDragHandler//I開頭的爲拖拽事件的接口,這選擇實現接口的方法實現拖拽
{
    private Image myImg;//獲取自身的Image組件,在拖動時將raycastTarget設爲false
    public void OnDrag(PointerEventData eventData)//拖動時觸發的函數,實時觸發
    {
        print("OnDrag");
      
        Debug.Log(eventData.pointerEnter);//pointerEnter表明鼠標進入到的UI物體

    }

    public void OnEndDrag(PointerEventData eventData)//拖動結束時觸發的函數,觸發一次
    {
        print("OnEndDrag");
        myImg.raycastTarget = true;
    }

    void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)//拖動開始觸發的函數,觸發一次,須要將自身的raycastTarget設爲true。
    {
        print("OnBeginDrag");
        myImg = transform.GetComponent<Image>();

    }
}

這裏要說一下,這裏只是簡單實現拖動函數,沒有實現拖拽時物體跟隨,本身能夠憑想法添加本身想要實現的效果,還有就是之因此要將raycastTarget設爲false就是當物體拖拽跟隨時,會阻擋下面的物體接收鼠標事件。

  1.將拖拽事件腳本掛到目標物體上

    目標物體上記得要有Image組件,能夠試試將Text上的Ratcast Target屬性打開試試。事件

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息