IsPointerOverGameObject防UI穿透在移动端检测失败【转】

文章转自:https://blog.csdn.net/LLLLL__/article/details/103038490

判断是否点击到UI上可以使用UnityEngine.EventSystem下的EventSystem.current.IsPointerOverGameObject()检测,但是在移动端无法使用该方法,以下三种方法可以解决:

第一种方法:

如果使用的是Touch类进行移动端手势判定,则可以使用IsPointerOverGameObject()的重载方法,传入触碰的手指Id


if(EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))

{

//TODO:点击在了UI上

}

第二种方法:

如果使用的是Input类进行的移动端手势判定,则可以通过UI事件发射射线进行检测


public static bool IsPointerOverUIObject()

{

    PointerEventData eventData = new PointerEventData(EventSystem.current);

    eventData.position = Input.mousePosition;

    List results = new List();

    EventSystem.current.RaycastAll(eventData, results);

    return results.Count > 0;

}

public bool IsPointerOverUIObject(Vector2 screenPosition)

{

    PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);

    eventDataCurrentPosition.position = new Vector2(screenPosition.x, screenPosition.y);

    List results = new List();

    EventSystem.current.RaycastAll(eventDataCurrentPosition, results);

    return results.Count > 0;

}



第三种方法:

通过画布上的GraphicRaycaster组件发射射线进行检测


ublic bool IsPointerOverUIObject(Canvas canvas, Vector2 screenPosition)

{

    PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);

    eventDataCurrentPosition.position = screenPosition;

    GraphicRaycaster uiRaycaster = canvas.gameObject.GetComponent();



    List results = new List();

    uiRaycaster.Raycast(eventDataCurrentPosition, results);

    return results.Count > 0;

}

你可能感兴趣的:(IsPointerOverGameObject防UI穿透在移动端检测失败【转】)