小功能丨不用传参,Unity获得鼠标悬浮处的物体、UI!

大家好,我是SKODE。

小提示:选中侧边目录,可快速找到所需内容

本系列博客地址:传送门

 

1、Unity获得当前鼠标悬浮处UI

        /// 
        /// 获得当前鼠标悬浮处UI
        /// 
        public static Transform GetOverUI(this Transform trans)
        {
            Transform obj = null;

            EventSystem uiEventSystem = EventSystem.current;
            if (uiEventSystem != null)
            {
                PointerEventData uiPointerEventData = new PointerEventData(uiEventSystem);
                uiPointerEventData.position = Input.mousePosition;

                List uiRaycastResultCache = new List();

                uiEventSystem.RaycastAll(uiPointerEventData, uiRaycastResultCache);
                if (uiRaycastResultCache.Count > 0)
                {
                    obj = uiRaycastResultCache[0].gameObject.transform;
                }
            }

            return obj;
        }

使用方法:

Transform overUI = transform.GetOverUI();

 

 

2、Unity获得当前鼠标悬浮处物体

       /// 
        /// 获得MainCamera下,当前鼠标下的3D物体
        /// 
        public static Transform GetOverObj(this Transform trans, Camera cam = null)
        {
            Transform obj = null;
            
            cam = cam == null ? Camera.main : cam;

            Ray ray = cam.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, cam.farClipPlane))
            {
                // 如果与物体发生碰撞,在Scene视图中绘制射线 
                Debug.DrawLine(ray.origin, hit.point, Color.green);

                obj = hit.transform;
            }

            return obj;
        }

使用方法:

Transform overObj = transform.GetOverObj();
  • 若你不是用MainCamera看场景的,那就将你正在使用的摄像机传入就好了。

 

 

一起进步

我是Skode

你可能感兴趣的:(#,小功能)