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接口真机失效问题】如有更好的解决方法欢迎留言探讨。

    推荐阅读