首页 > 技术文章 > 关于按钮点击事件的PointerEventData属性详解

Simon-Lin 2019-07-18 14:53 原文

PointerEventData .button

触发此事件的按钮

PointerEventData.clickCount

计算按钮连击次数,间隔时间很短

public class ExampleClass : MonoBehaviour, IPointerDownHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
        int i = eventData.clickCount;
        Debug.Log(i);
    }
}

PointerEventData .clickTime

上次发送点击事件的时间。这个时间不是每一次点击都是从新开始计算,会根据上一次的时间继续累加

PointerEventData.delta

自上次更新以来的指针坐标增量变化变化。
没有用到,不知道干嘛的

public class ExampleScript : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    private float timeCount;
    private Vector2 deltaValue = Vector2.zero;

    public void OnBeginDrag(PointerEventData data)
    {
        deltaValue = Vector2.zero;
    }

    public void OnDrag(PointerEventData data)
    {
        deltaValue += data.delta;
        if (data.dragging)
        {
            timeCount += Time.deltaTime;
            if (timeCount > 0.5f)
            {
                timeCount = 0.0f;
                Debug.Log("delta: " + deltaValue);
            }
        }
    }

    public void OnEndDrag(PointerEventData data)
    {
        deltaValue = Vector2.zero;
    }
}

PointerEventData .dragging
返回bool值,判断当前按钮是否在拖动

PointerEventData .enterEventCamera
与最后一个OnPointerEnter事件关联的摄像头。
这个主要用于多相机混合的时候判断当前按钮的事件是由哪个相机触发的.

PointerEventData .hovered
悬停堆栈中的对象列表。
目前发现只能触发该脚本物体上第一个射线检测到的子物体

public void OnPointerEnter (PointerEventData eventData)
    {
        for (int i = 0; i < eventData.hovered.Count; i++)
        {
            Debug.Log(eventData.hovered[i].name);
        }
    }

PointerEventData.lastPress
最后一次按下事件的物体,这个会记录上一次点击到的按钮信息,如果是第一打开面板,没有点击过按钮,这个会报空

PointerEventData.pointerCurrentRaycast
包含当前响应射线检测事件的信息,例如这个gameobject,ui层级等

PointerEventData .pointerDrag
当前触发 OnDrag事件的物体,设置为空的时候不再触发OnDrag和 OnEndDrag .

PointerEventData.pointerEnter
当前触发OnPointerEnter的对象,一般鼠标移动到ui上的时候会触发这个事件,对应的是OnPointerExit,鼠标移出的时候

PointerEventData .pointerId
鼠标点击时的id
-1,-2,-3分别对应鼠标左键,右键和中键,手机端触摸时也有相应的id

PointerEventData .pointerPress
接收OnPointerDown的游戏物体

PointerEventData .pointerPressRaycast
指针按下时响应射线检测的ui,在一次点击事件中不会改变,pointerCurrentRaycast这个会随着拖动等操作变化

PointerEventData .position
当前指针的位置,返回一个vector2向量,这个值是一个屏幕坐标,左下角为原点(0,0),右上角为(屏幕宽,屏幕高),这个屏幕是根据当前分辨率来的

PointerEventData .pressEventCamera
与最后一个OnPointerPress事件关联的摄像头,当没有接收OnPointerDown的游戏物体会报空

PointerEventData.pressPosition
按下的时候的指针位置,同样的一次点击事件只有一个

PointerEventData .rawPointerPress
当前执行事件中的物体,即使这个物体不在能够触发事件,例如关闭或者被销毁(没用过)

PointerEventData .scrollDelta
自上次更新以来的滚动量(没用过)

推荐阅读