第一种1 y+ I; z) x0 i, K1 u
可以得到UI,再根据名字判断是不是自己自己要点击的UI,其中参数canvas拖入此UI的canvas) U! h5 c- x i* a. j
- /// <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;
- }
第二种" Y9 x/ ^& }7 }& O) ^+ p2 M
rect 为要判断的那个UI的RectTransform; p* F2 r! b v5 i" T w( \, W8 \3 C
- bool isUI = RectTransformUtility.RectangleContainsScreenPoint(rect, Input.mousePosition)
补充:Unity中判断鼠标或者手指是否点击在UI上(UGUI)
1 |1 F9 j1 |/ Y, v- M 在Unity场景中,有时UI和游戏角色都需要响应触摸事件,如果同时响应可能就会出现点击UI的时候影响到了游戏角色。所以我们需要对所点击到的东西做判断,这里使用UGUI系统自带的方法和射线检测的方式,判断是否点击到UI上:
' a) I& j! ?2 G: Z第一种方法,直接在Update中判断:' p: x, o0 c6 A3 F9 o# c. z
- void Update()
- {
- //判断是否点击UI
- if (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");
- }
- }
- }
第二种方式:射线检测4 ~. a0 V d3 S; d; u, o0 C
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.EventSystems;
- public class NewBehaviourScript : MonoBehaviour
- {
- // Update is called once per frame
- void 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");
- }
- }
- }
- }
-
- /// <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)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
$ Q. s, ~! O' V9 M# H+ v9 n1 H! R
$ J; g7 q7 e( S% u4 ?3 J9 H |