第一种- f2 v6 d8 i! l# i+ s- [$ @% d
可以得到UI,再根据名字判断是不是自己自己要点击的UI,其中参数canvas拖入此UI的canvas
# j8 s" d6 M5 ^; x* E/// <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;
} 第二种0 {1 E' F6 y! r% y. x
rect 为要判断的那个UI的RectTransform
, ]0 e* A' S5 u4 f+ Z4 }" cbool isUI = RectTransformUtility.RectangleContainsScreenPoint(rect, Input.mousePosition) 补充:Unity中判断鼠标或者手指是否点击在UI上(UGUI); l+ D6 s, B) M. x' z0 I* B* Z; P
在Unity场景中,有时UI和游戏角色都需要响应触摸事件,如果同时响应可能就会出现点击UI的时候影响到了游戏角色。所以我们需要对所点击到的东西做判断,这里使用UGUI系统自带的方法和射线检测的方式,判断是否点击到UI上:
7 R$ T4 ?9 f+ p0 _& t' y第一种方法,直接在Update中判断:
. k8 C1 ` K0 M8 v, e7 c5 _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");
}
}
} 第二种方式:射线检测3 J3 }8 V: t% ^6 M H# q+ D- z" `
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 a+ y( T+ W6 A* e' W* }2 [/ H
8 M/ n4 ^8 \9 i2 U- X& { |