unity|unity 如何判断鼠标是否在哪个UI上(两种方法)
第一种
可以得到UI,再根据名字判断是不是自己自己要点击的UI
【unity|unity 如何判断鼠标是否在哪个UI上(两种方法)】其中参数canvas拖入此UI的canvas
/// /// 获取鼠标停留处UI/// /// ///public GameObject GetOverUI(GameObject canvas){PointerEventData pointerEventData = https://www.it610.com/article/new PointerEventData(EventSystem.current); pointerEventData.position = Input.mousePosition; GraphicRaycaster gr = canvas.GetComponent (); List results = new List (); gr.Raycast(pointerEventData, results); if (results.Count != 0){return results[0].gameObject; }return null; }
第二种就简单了 rect 为要判断的那个UI的RectTransform
bool isUI = RectTransformUtility.RectangleContainsScreenPoint(rect, Input.mousePosition)
补充:Unity中判断鼠标或者手指是否点击在UI上(UGUI)
在Unity场景中,有时UI和游戏角色都需要响应触摸事件,如果同时响应可能就会出现点击UI的时候影响到了游戏角色。所以我们需要对所点击到的东西做判断,这里使用UGUI系统自带的方法和射线检测的方式,判断是否点击到UI上:
第一种方法,直接在Update中判断:
void Update(){//判断是否点击UIif (Input.GetMouseButtonDown(0) || (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)){//移动端if (Application.platform == RuntimePlatform.Android ||Application.platform == RuntimePlatform.IPhonePlayer){int fingerId = Input.GetTouch(0).fingerId; if (EventSystem.current.IsPointerOverGameObject(fingerId)){Debug.Log("点击到UI"); }}//其它平台else{if (EventSystem.current.IsPointerOverGameObject()){Debug.Log("点击到UI"); }}}
第二种方式:射线检测
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class NewBehaviourScript : MonoBehaviour{// Update is called once per framevoid Update(){//移动端if (Application.platform == RuntimePlatform.Android ||Application.platform == RuntimePlatform.IPhonePlayer){if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began){if (IsPointerOverGameObject(Input.GetTouch(0).position)){Debug.Log("点击到UI"); }}}//其它平台else{if(Input.GetMouseButtonDown(0)){if (IsPointerOverGameObject(Input.mousePosition)){Debug.Log("点击到UI"); }}}} /// /// 检测是否点击UI/// /// ///private bool IsPointerOverGameObject(Vector2 mousePosition){//创建一个点击事件PointerEventData eventData = https://www.it610.com/article/new PointerEventData(EventSystem.current); eventData.position = mousePosition; List raycastResults = new List (); //向点击位置发射一条射线,检测是否点击UIEventSystem.current.RaycastAll(eventData, raycastResults); if (raycastResults.Count > 0){return true; }else{return false; }}}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
推荐阅读
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树
- Linux下面如何查看tomcat已经使用多少线程
- thinkphp|thinkphp 3.2 如何调用第三方类库
- 2019女表什么牌子好(如何挑选女士手表?)