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

tech2022-12-04  115

大家好,我是SKODE。

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

本系列博客地址:传送门

 

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

/// <summary> /// 获得当前鼠标悬浮处UI /// </summary> 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<RaycastResult> uiRaycastResultCache = new List<RaycastResult>(); uiEventSystem.RaycastAll(uiPointerEventData, uiRaycastResultCache); if (uiRaycastResultCache.Count > 0) { obj = uiRaycastResultCache[0].gameObject.transform; } } return obj; }

使用方法:

Transform overUI = transform.GetOverUI();

 

 

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

/// <summary> /// 获得MainCamera下,当前鼠标下的3D物体 /// </summary> 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

我是橙子va 认证博客专家 XR博主 前端框架 U3D开发者,AR/MR研究方向。有过联想VR项目开发、影创MR开发,也在杭电当过讲师,给网易AR上架过项目。是国内某知名电影及电视剧观众。个人联系方式:skode@foxmail.com
最新回复(0)