Unity中完美實現對iphoneX的全面屏適配,主要針對豎屏遊戲

Unity中完美實現對iphoneX的全面屏適配,主要針對豎屏遊戲

在unity中我們可以通過UI的設定錨點來實現不用尺寸螢幕的適配,但是iphoneX有“劉海”,會擋住遊戲中的關鍵資訊,如圖:
這裡寫圖片描述
解決的思路是:整個遊戲的繪製區域縮短並下移32個單位(96畫素高度)空出“劉海”(statusBar)的高度,然後把statusBar優雅的顯示出來,最終效果在iphoneX上的截圖(實際效果可以想象一下,非常完美):
這裡寫圖片描述

下面開始貼程式碼,都是在Xcode工程裡實現的。

  • 整個遊戲的繪製區域縮短並下移32個單位,找到這個函式:
    這裡寫圖片描述
    修改:
    //_window           = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
CGRect winSize = [UIScreen mainScreen].bounds;
if(winSize.size.height/winSize.size.width>2){
winSize.size.height -=32;
winSize.origin.y = 32;
}
_window = [[UIWindow alloc] initWithFrame:winSize];
  • 把statusBar優雅的顯示出來,找到這兩個函式:
    這裡寫圖片描述
    這裡寫圖片描述
    修改:
- (BOOL)prefersStatusBarHidden
{
static bool _PrefersStatusBarHidden = true;
static bool _PrefersStatusBarHiddenInited = false;
if(!_PrefersStatusBarHiddenInited)
{
NSNumber* hidden = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIStatusBarHidden"];
_PrefersStatusBarHidden = hidden ? [hidden boolValue] : YES;
CGRect winSize = [UIScreen mainScreen].bounds;
if(winSize.size.height/winSize.size.width>2){
_PrefersStatusBarHidden = false;
NSLog(@"show status bar");
}
_PrefersStatusBarHiddenInited = true;
}
return _PrefersStatusBarHidden;
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
static UIStatusBarStyle _PreferredStatusBarStyle = UIStatusBarStyleDefault;
static bool _PreferredStatusBarStyleInited = false;
if(!_PreferredStatusBarStyleInited)
{
NSString* style = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIStatusBarStyle"];
if(style && ([style isEqualToString:@"UIStatusBarStyleBlackOpaque"] || [style isEqualToString:@"UIStatusBarStyleBlackTranslucent"]))
_PreferredStatusBarStyle = UIStatusBarStyleLightContent;
CGRect winSize = [UIScreen mainScreen].bounds;
if(winSize.size.height/winSize.size.width>2){
_PreferredStatusBarStyle = UIStatusBarStyleLightContent;
NSLog(@"set status bar light");
}
_PreferredStatusBarStyleInited = true;
}
return _PreferredStatusBarStyle;
}

這裡判斷當前裝置是否是iphoneX的方法比較粗暴,就是螢幕長寬比是不是超過2。願意修改的同學可以自己改一下。