Unity中完美实现对iphoneX的全面屏适配,主要针对竖屏游戏

在unity中我们可以通过UI的设置锚点来实现不用尺寸屏幕的适配,但是iphoneX有“刘海”,会挡住游戏中的关键信息,如图:
Unity中完美实现对iphoneX的全面屏适配,主要针对竖屏游戏_第1张图片
解决的思路是:整个游戏的绘制区域缩短并下移32个单位(96像素高度)空出“刘海”(statusBar)的高度,然后把statusBar优雅的显示出来,最终效果在iphoneX上的截屏(实际效果可以想象一下,非常完美):
Unity中完美实现对iphoneX的全面屏适配,主要针对竖屏游戏_第2张图片

下面开始贴代码,都是在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。愿意修改的同学可以自己改一下。

你可能感兴趣的:(Unity,XCode,适配,iphoneX)