Unity 检测鼠标是否在UI上的方法

这篇具有很好参考价值的文章主要介绍了Unity 检测鼠标是否在UI上的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 整理一下:

1.官方提供的API:

 void LateUpdate()
        {
            //该方法过于简单粗暴,所有有些不足之处,列如:1.检测不到返回细节,2.场景有3d可点击物体,也会杯当作UI 检测(这点可能不准确,需要测试)

            //方法用于判断鼠标是否点击在UI上。这个方法通过检查
            //UI元素的Raycast Target属性来确定是否在UI元素上。如果UI元素的Raycast Target属性被勾选,
            //那么当鼠标点击在该UI元素上时,该方法将返回true;否则,返回false。
            if (EventSystem.current.IsPointerOverGameObject())
            {
                Debug.Log("点击了UI");
            }
         
        }



        

2.直接通过检测UIcanvas 的GraphicRaycaster来判断(直接杜绝检测到场景中物体)

 /// <summary>
        /// 获取鼠标停留处UI
        /// </summary>
        /// <param name="canvas"></param>
        /// <returns></returns>
        public bool 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);
            Debug.Log("results.Count=" + results.Count);
           // return results[0].gameObject.name;
            if (results.Count != 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

3.和官方提供的差不多文章来源地址https://www.toymoban.com/news/detail-754678.html

void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (IsPointerOverGameObject(Input.mousePosition))
            {
                Debug.Log("点击到UI");
            }
            else
            {
                Debug.Log("点击到空白");
                choiceTime.StartChoiceTime();
            }
        }
    }

        
        /// <summary>
        /// 检测是否点击UI
        /// </summary>
        /// <param name="mousePosition">鼠标位置</param>
        /// <returns></returns>
        private bool IsPointerOverGameObject(Vector2 mousePosition)
        {
            //创建一个点击事件
            PointerEventData eventData = new PointerEventData(EventSystem.current);
            eventData.position = mousePosition;
            List<RaycastResult> raycastResults = new List<RaycastResult>();
            //向点击位置发射一条射线,检测是否点击UI
            EventSystem.current.RaycastAll(eventData, raycastResults);
            if (raycastResults.Count > 0)//大于0 说明 有UI
            {
                return true;
            }
            else
            {
                return false;
            }
        }


//方法 扩展

/// <summary>
        /// 检测是否点击UI
        /// </summary>
        /// <param name="mousePosition">鼠标位置</param>
        /// <returns></returns>
        private bool IsPointerOverGameObject(Vector2 mousePosition)
        {
            //创建一个点击事件
            PointerEventData eventData = new PointerEventData(EventSystem.current);
            eventData.position = mousePosition;
            List<RaycastResult> raycastResults = new List<RaycastResult>();
            //向点击位置发射一条射线,检测是否点击UI
            EventSystem.current.RaycastAll(eventData, raycastResults);

            if (raycastResults.Count > 0)
            {
                Debug.Log("raycastResults[0].gameObject.name=" + raycastResults[0].gameObject.name);
                if (raycastResults[0].gameObject.name == "RawImage")//判断是否 是 自己要点击的UI
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {

                return false;
            }

        }
        


到了这里,关于Unity 检测鼠标是否在UI上的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 判断物体是否在指定范围内

    使用 Physics.CheckSphere 函数通过检测指定点周围是否有碰撞体,可以传入一个位置向量和一个半径值,如果需要对指定层级进行检测可以传入LayerMask 表示需要检测的碰撞体的层。结果会返回一个bool值,表示该位置是否有碰撞体与之重叠。  运行效果

    2024年02月04日
    浏览(45)
  • Unity判断物体是否被某个相机可见

    第一种方式: 将物体的世界坐标转换为视口坐标(Viewport Coordinates),得到的坐标值会在[0,1]的范围内,表示物体在相机视口中的位置。如果物体的位置在这个范围内,就说明它被相机看到了。 第二种方式: 判断物体是否完全在相机的视锥体内,可以使用相机的GeometryUtilit

    2024年02月05日
    浏览(58)
  • unity 判断当前设备是否是模拟器(安卓)

    最近有个需求,需要判断当前设备是否是模拟器,网上查了一下,发现基本上都是使用特征字符串进行检索,类似这种: 发现都是不行的,因为现在的模拟器都会伪装== 还有一种方法是使用 AndroidJavaClass 来调用安卓相关的方法:参考林新发大佬 例如这种: ps:由于没用安卓

    2024年02月14日
    浏览(55)
  • Unity利用正则表达式判断字符串是否满足要求

    首先该方法属于C#,是C#提供的,不是unity提供的,但我使用这个是在unity中使用的,故此我将其归入unity笔记。 该方式可用于注册、登录等等需要用户输入的场景,用以判断字符串是否满足正则表达式的要求 首先介绍该API 这里开始介绍,大家可以看看官方的文档Regex.IsMatch 方

    2024年01月16日
    浏览(49)
  • Unity用鼠标拖拽UI,UI跟随鼠标移动

    先上效果 继承几个拖拽的接口 IBeginDragHandler, IDragHandler,IEndDragHandler 计算下偏移量,转换下坐标系 限制下可拖拽的范围,我设置的是canvas的大小 欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。 如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~ 声明

    2024年02月06日
    浏览(80)
  • 【Unity】获取UI物体在屏幕上的位置

    获取ui在自身Canvas的相对位置且canvas全屏 ui的屏幕坐标就是自身相对于canvas位置加上canvas大小的1/2;

    2024年02月12日
    浏览(45)
  • Unity 3D通过脚本控制音频音量、继续、暂停、停止播放;判断当前音乐是否播放;切换音乐;

    演示 在HideInInspector中将三首音乐拖到音乐组中,自定义音乐数量也可以,需要修改代码中切换音乐函数中的部分内容。调用脚本中的函数即可实现对应功能。 重复播放音乐代码如下

    2024年02月12日
    浏览(57)
  • [Unity]UI事件(鼠标进入、离开、点击)

    1、首先继承IPointerEnterHandler、IPointerExitHandler等接口 2、实现其方法 如:OnPointerEnter、OnPointerExit 注意:这些只对UI有效,而OnMouseEnter只对加Collider的非UI有效

    2024年03月17日
    浏览(62)
  • Unity 鼠标控制 UI 放大、缩小、拖拽

    2024年02月12日
    浏览(60)
  • Unity Input输入类-鼠标键盘检测

    当你开发Unity游戏时,与用户的输入交互是非常重要的。Unity提供了丰富的输入类来帮助你获取用户的输入,并做出相应的响应。在本文中,我将会向你介绍Unity中的输入类,包括Input、KeyCode、MouseButton和Touch等。 Input类 Input类是Unity中最基础的输入类,它可以获取各种类型的输

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包