Unity关于IsPointerOverGameObject接口真机失效问题
在制作游戏时,有时需要发射射线执行游戏的相关功能,但是在点击UI的同时,却也会触发游戏内的相关功能,为了规避此事件的发生,Unity提供了一个名为EventSystem.current.IsPointerOverGameObject()的函数,使用这个函数可以规避点在UI上依旧会触发游戏功能。但是在电脑上运行无误,打包成apk到真机上之后,这个函数会失效。
所以我们用如下代码对此接口进行优化,示例代码如下:
public static bool IsPointerOverGameObject()
{PointerEventData eventData = https://www.it610.com/article/new PointerEventData(UnityEngine.EventSystems.EventSystem.current);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;
List list = new List();
UnityEngine.EventSystems.EventSystem.current.RaycastAll(eventData, list);
return list.Count > 0;
}
调用优化后的接口即可
if (IsPointerOverGameObject() == false)
此接口多数情况下工作正常,但是有一种情况会失效。当点击关闭按钮关闭某个界面或UI时。还是会出现点到UI,界面顺利关闭的情况下触发游戏功能。解决方法只能延缓界面的关闭。示例代码如下:
public void CloseChangeWindow()
{Invoke("RealClose",0.1f);
}private void RealClose()
{ChangeWindow.SetActive(false);
}
【Unity关于IsPointerOverGameObject接口真机失效问题】如有更好的解决方法欢迎留言探讨。
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 四首关于旅行记忆的外文歌曲
- 醒不来的梦
- 关于自我为中心的一点感想
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 关于Ruby的杂想
- 关于读书的思考
- 关于this的一些问题(1)
- 《声之形》
- Unity和Android通信系列文章2——扩展UnityPlayerActivity