unity EventSystem.current.IsPointerOverGameObject() 点在canvas上会返回true吗
时间: 2024-04-10 16:30:15 浏览: 149
是的,当鼠标点击或触摸事件发生在 Unity 的 Canvas 上时,使用 EventSystem.current.IsPointerOverGameObject() 方法会返回 true。这个方法用于判断当前指针是否在 UI 元素上,Canvas 是 UI 元素的容器,因此点击 Canvas 上的任何 UI 元素都会被认为是在 UI 元素上。
相关问题
if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) return true; }
这段代码主要是用于判断当前手指是否在 UI 控件上,如果是则返回 true,否则返回 false。
具体来说,这里使用了 Unity 引擎中的 EventSystem.current.IsPointerOverGameObject 方法,该方法会根据当前的触摸位置判断是否在 UI 控件上。如果是,则返回 true,表示当前手指在 UI 控件上;否则返回 false,表示当前手指不在 UI 控件上。
需要注意的是,这里使用了 Input.GetTouch(0).fingerId 获取当前触摸的手指 id,因为一个触摸事件可能包含多个手指,所以需要通过手指 id 来判断当前手指是否在 UI 控件上。
unity中 private void OnMouseUp() { if (EventSystem.current.IsPointerOverGameObject()) { //Debug.Log("EventSystem.current.IsPointerOverGameObject"); } else { //先关闭所有 OpenManager.Instance.CloseShowUI(); Debug.Log("空引用追踪 11"); foreach (var da in ShowTypes) { Debug.Log("空引用追踪 22"); //再调用展示方法 //OpenManager.Instance.ShowMessage(da.my_ShowType, System.IO.Path.Combine(Application.streamingAssetsPath, da.path)); OpenManager.Instance.ShowMessage(da.my_ShowType, da.path); } } }这个函数修改为安卓可用
您可以把 OnMouseUp() 方法修改为 OnPointerUp() 方法,这个方法在安卓平台和其他移动设备上是有效的。同时,您需要使用 EventSystem.current.currentSelectedGameObject 来检测当前是否有 UI 元素被选中,代码如下:
```csharp
using UnityEngine.EventSystems;
private void OnPointerUp(PointerEventData eventData)
{
if (EventSystem.current.IsPointerOverGameObject(eventData.pointerId))
{
//Debug.Log("EventSystem.current.IsPointerOverGameObject");
}
else
{
//先关闭所有
OpenManager.Instance.CloseShowUI();
Debug.Log("空引用追踪 11");
foreach (var da in ShowTypes)
{
Debug.Log("空引用追踪 22");
//再调用展示方法
//OpenManager.Instance.ShowMessage(da.my_ShowType, System.IO.Path.Combine(Application.streamingAssetsPath, da.path));
OpenManager.Instance.ShowMessage(da.my_ShowType, da.path);
}
}
}
```
注意,您需要在代码文件的开头添加 using UnityEngine.EventSystems; 来引用 EventSystem 类。
阅读全文