緣由:判斷是否將一個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屬性打開試試。事件