大家好,我是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