1. 程式人生 > >Unity適配iPhoneX iOS 11+ Home鍵易誤操作的問題

Unity適配iPhoneX iOS 11+ Home鍵易誤操作的問題

問題描述

iPhone裝置首次去掉的傳統的Home鍵,以極大的擴充套件了螢幕尺寸,取代Home鍵的是螢幕底部中間的虛擬home條,響應上滑手勢回到主頁面。但如此造成的問題是遊戲中尤其是像王者榮耀等操作比較頻繁的遊戲很容易誤操作home鍵,導致遊戲偶然退出影響遊戲體驗。

適配目標

現在適配iPhoneX的目標是兩次上滑操作才最終出發home鍵,預設狀態讓home虛擬條處於灰白色狀態,第一次上滑home條啟用變黑,再次上滑才會最終出發回到主頁面,這樣就避免了遊戲中的頻繁誤操作導致遊戲意外退出。目前像楚留香等遊戲已經在細節上做了此適配,而其他多數遊戲並沒有考慮到這個。

適配方案

iOS dev官方文件提到在iOS 11之後給出了一個供開發者延遲系統手勢響應的回撥介面:preferredScreenEdgesDeferringSystemGestures。在我們用unity打出xcode包後,在Classes/UI/UnityViewControllerBase+iOS.mm檔案下有如下兩個回撥函式:

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
    UIRectEdge res = UIRectEdgeNone;
    if (UnityGetDeferSystemGesturesTopEdge())
        res |= UIRectEdgeTop;
    if (UnityGetDeferSystemGesturesBottomEdge())
        res |= UIRectEdgeBottom;
    if (UnityGetDeferSystemGesturesLeftEdge
()
) res |= UIRectEdgeLeft; if (UnityGetDeferSystemGesturesRightEdge()) res |= UIRectEdgeRight; return res; } -(BOOL)prefersHomeIndicatorAutoHidden{ return UnityGetHideHomeButton(); }

一個是延遲系統手勢的,一個是是否自動隱藏home條的,但要注意我們是希望home條變灰,經過一個啟用的過程達到系統手勢延遲的效果,而不是希望home條隱藏消失,所以最終的方案是將上面兩個函式替換成:

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
    return UIRectEdgeAll;
}

即:
1.preferredScreenEdgesDeferringSystemGestures回撥返回固定的UIRectEdgeAll,
2.prefersHomeIndicatorAutoHidden回撥刪掉

注:如果某些版本打出的xcode本來就沒有上面兩個回撥函式,則只新增下面的回撥即可:

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
    return UIRectEdgeAll;
}

適配後的效果

遊戲中螢幕中底部home 條預設灰白色,不小心上滑home條變黑啟用,再次上滑退出遊戲回到home主頁面。