第一种
. {0 S9 `, _# v 可以得到UI,再根据名字判断是不是自己自己要点击的UI,其中参数canvas拖入此UI的canvas- v O* L! @5 w; |
- /// <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;
- }
第二种
$ |. `3 Y/ ~5 _ rect 为要判断的那个UI的RectTransform5 G+ _1 p0 R& C" [- {
- bool isUI = RectTransformUtility.RectangleContainsScreenPoint(rect, Input.mousePosition)
补充:Unity中判断鼠标或者手指是否点击在UI上(UGUI)4 q+ x l* [- y
在Unity场景中,有时UI和游戏角色都需要响应触摸事件,如果同时响应可能就会出现点击UI的时候影响到了游戏角色。所以我们需要对所点击到的东西做判断,这里使用UGUI系统自带的方法和射线检测的方式,判断是否点击到UI上:
5 R! d* H% h0 a; z7 Z$ g第一种方法,直接在Update中判断:
5 E- g. i/ M" d( t/ f- 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");
- }
- }
- }
第二种方式:射线检测
# _. P2 j3 M) `- A4 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;
- }
- }
- }
1 c& m8 D0 ~, f) L3 r
8 r3 {; M- S& V1 H* J F
|