温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Unity怎么获取鼠标停留位置下的物体

发布时间:2021-04-13 10:55:30 来源:亿速云 阅读:628 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关Unity怎么获取鼠标停留位置下的物体的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

根据UGUI的射线检测机制获取当前鼠标下的UI:

/// <summary>     /// 获取鼠标停留处UI     /// </summary>     /// <param name="canvas"></param>     /// <returns></returns>     public GameObject GetOverUI(GameObject canvas)     {         PointerEventData pointerEventData = new PointerEventData(EventSystem.current);         pointerEventData.position = Input.mousePosition;         GraphicRaycaster gr = canvas.GetComponent<GraphicRaycaster>();         List<RaycastResult> results = new List<RaycastResult>();         gr.Raycast(pointerEventData, results);         if (results.Count != 0)         {             return results[0].gameObject;         }          return null;     }

其中,results为鼠标下UI的列表。

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

/// <summary>     /// 获取鼠标停留处物体     /// </summary>     /// <param name="raycaster"></param>     /// <returns></returns>     public GameObject GetOverGameObject(GameObject raycaster)     {         PointerEventData pointerEventData = new PointerEventData(EventSystem.current);         pointerEventData.position = Input.mousePosition;         PhysicsRaycaster pr = raycaster.GetComponent<PhysicsRaycaster>();         List<RaycastResult> results = new List<RaycastResult>();         pr.Raycast(pointerEventData, results);         if (results.Count != 0)         {             return results[0].gameObject;         }          return null;     }

刚遇到一个问题,我的UI点击包括3D物体点击都是用的EventSystem,也就是上面的方法,这时用

UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()这个方法去判断鼠标是否在UI上,就会出现鼠标在3D物体上也会拿到返回值,(没有去研究传参index的用法),直接选择了上面获取UI的获取方法。

脚本:

/************************************************************ * 版本声明:v1.0.0 * 类 名 称:MouseOverController.cs * 创建日期:2019/8/10 16:10:44 * 作者名称:末零 * 功能描述:获取鼠标停留处的物体 ************************************************************/  using System.Collections.Generic;  using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;  namespace LastZero.Utility {     public class MouseOverController     {         /// <summary>         /// 获取鼠标停留处UI         /// </summary>         /// <param name="canvas"></param>         /// <returns></returns>         public static GameObject GetOverUI(GameObject canvas)         {             PointerEventData pointerEventData = new PointerEventData(EventSystem.current);             pointerEventData.position = Input.mousePosition;             GraphicRaycaster gr = canvas.GetComponent<GraphicRaycaster>();             List<RaycastResult> results = new List<RaycastResult>();             gr.Raycast(pointerEventData, results);             if (results.Count != 0)             {                 return results[0].gameObject;             }              return null;         }          /// <summary>         /// 获取鼠标停留处UI         /// </summary>         /// <param name="canvas"></param>         /// <returns></returns>         public static GameObject GetOverGameObject(GameObject camera)         {             if (camera.GetComponent<PhysicsRaycaster>() == null)                 camera.AddComponent<PhysicsRaycaster>();              PointerEventData pointerEventData = new PointerEventData(EventSystem.current);             pointerEventData.position = Input.mousePosition;             PhysicsRaycaster gr = camera.GetComponent<PhysicsRaycaster>();             List<RaycastResult> results = new List<RaycastResult>();             gr.Raycast(pointerEventData, results);             if (results.Count != 0)             {                 return results[0].gameObject;             }              return null;         }     } }

补充:unity中鼠标经过一个物体时出现提示

首先被检测的物体要有collider

using UnityEngine; using System.Collections; public class Cube : MonoBehaviour { //    public Transform cube;     bool isShowTip; //    // Use this for initialization     void Start () {         isShowTip=false;     }         void OnMouseEnter () {         isShowTip=true;         //Debug.Log (cube.name);//可以得到物体的名字     }     void OnMouseExit () {         isShowTip=false;     }     void OnGUI () {         if (isShowTip){             GUI.Label(new Rect(Input.mousePosition.x,Screen.height-Input.mousePosition.y,100,40),"afdasdfasdf");           }       } }

补充:Unity中UGUI中获取鼠标点击位置以及UI物体的屏幕坐标

鼠标点击位置:

直接访问Input.mousePosition属性,返回一个三维屏幕坐标,即鼠标的坐标。

UI物体的屏幕坐标:

RectTransformUtility.WordToScreenPoint(Camera.main, rectTransform.position),返回的是二维屏幕坐标。

感谢各位的阅读!关于“Unity怎么获取鼠标停留位置下的物体”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI