来自于:剑起苍穹
    根据UGUI的射线检测机制获取当前鼠标下的UI

    1. /// <summary>
    2. /// 获取鼠标停留处UI
    3. /// </summary>
    4. /// <param name="canvas"></param>
    5. /// <returns></returns>
    6. public GameObject GetOverUIobj(GameObject canvas)
    7. {
    8. PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
    9. pointerEventData.position = Input.mousePosition;
    10. GraphicRaycaster gr = canvas.GetComponent<GraphicRaycaster>();
    11. List<RaycastResult> results = new List<RaycastResult>();
    12. gr.Raycast(pointerEventData, results);
    13. if (results.Count != 0)
    14. {
    15. return results[0].gameObject;
    16. }
    17. return null;
    18. }

    不仅适用于UGUI,也可以在摄像机上添加PhysicsRaycaster组件,这样可以获取3D物体。

    1. /// <summary>
    2. /// 获取鼠标停留处物体
    3. /// </summary>
    4. /// <param name="raycaster"></param>
    5. /// <returns></returns>
    6. public GameObject GetOverWordGameObject(GameObject raycaster)
    7. {
    8. PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
    9. pointerEventData.position = Input.mousePosition;
    10. PhysicsRaycaster pr = raycaster.GetComponent<PhysicsRaycaster>();
    11. List<RaycastResult> results = new List<RaycastResult>();
    12. pr.Raycast(pointerEventData, results);
    13. if (results.Count != 0)
    14. {
    15. return results[0].gameObject;
    16. }
    17. return null;
    18. }