Java教程

UI:PointerEventData

本文主要是介绍UI:PointerEventData,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

   原因:判断是否将一个UI物体拖放到另一个UI物体上面。

 1.拖拽实现可以直接用EventTrigger组件或者自己实现拖拽事件的接口完成;

 2.在OnDrag方法中借助PointEventData事件进行检测;

 3.关于PointEventData的介绍,参考博文:https://blog.csdn.net/qq_41056203/article/details/84875282;

 4.这次检测主要是靠PointEventData中的pointerEnter属性完成,该属性会返回鼠标滑入的UI物体,返回值为GameObject;

 5.由4可知需要检测鼠标的划入事件,就需要有Image的raycastTarget属性,raycastTarget代表是否接收UI事件;

 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属性打开试试。

 

 

 

 

 

 

 

  

这篇关于UI:PointerEventData的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!