在制作游戲時,有時需要發射射線執行游戲的相關功能,但是在點擊UI的同時,卻也會觸發游戲內的相關功能,為了規避此事件的發生,Unity提供了一個名為EventSystem.current.IsPointerOverGameObject()的函式,使用這個函式可以規避點在UI上依舊會觸發游戲功能,但是在電腦上運行無誤,打包成apk到真機上之后,這個函式會失效,
所以我們用如下代碼對此介面進行優化,示例代碼如下:
public static bool IsPointerOverGameObject()
{
PointerEventData eventData = new PointerEventData(UnityEngine.EventSystems.EventSystem.current);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;
List<RaycastResult> list = new List<RaycastResult>();
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);
}
如有更好的解決方法歡迎留言探討,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/310663.html
標籤:其他
上一篇:PixelBook 2017 安裝Windows 10驅動程式,滿足日常使用。
下一篇:GPS定位解決偏差
