unity3d iPhone X 适屏代码 屏幕适应方案

添加获取手机型号方法

#import <sys/utsname.h>
+ (NSString*)getDeviceVersion
{
    struct utsname systemInfo;
    uname(&systemInfo);
    NSString *deviceVersion = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    return deviceVersion;
}

在unity导出的xcode工程里面 查找路径 Unity-iPhone/Classes/Unity/DisplayManager.mm修改方法如下

- (void)updateScreenSize
{
    CGSize layerSize    = _view.layer.bounds.size;
    NSString *deviceVersion = [这里调用上面的获取型号方法];
    if ([deviceVersion isEqualToString:@"iPhone10,3"] || [deviceVersion isEqualToString:@"iPhone10,6"])
    {
        layerSize = CGSizeMake(744, 375);
    }
    CGFloat scale       = UnityScreenScaleFactor(_screen);
    _screenSize = CGSizeMake(layerSize.width * scale, layerSize.height * scale);
}

- (id)createView:(BOOL)useForRendering showRightAway:(BOOL)showRightAway;
{
    if(_view == nil)
    {
        NSString *deviceVersion = [这里调用上面的获取型号方法];
        if ([deviceVersion isEqualToString:@"iPhone10,3"] || [deviceVersion isEqualToString:@"iPhone10,6"])
        {
            CGRect bounds = CGRectMake(34, 0, 744, 375);
            _window  = [[UIWindow alloc] initWithFrame:bounds];
        }
        else
        {
            _window = [[UIWindow alloc] initWithFrame: _screen.bounds];
        }

        _window.screen = _screen;

        if(_screen == [UIScreen mainScreen])
        {
            _view = [GetAppController() initUnityView];
            NSAssert([_view isKindOfClass:[UnityView class]], @"You MUST use UnityView subclass as unity view");
        }
        else
        {
            _view = [(useForRendering ? [UnityRenderingView alloc] : [UIView alloc]) initWithFrame: _screen.bounds];
        }

        _view.contentScaleFactor = UnityScreenScaleFactor(self.screen);
        [self updateScreenSize];

        if(showRightAway)
        {
            [_window addSubview:_view];
            [_window makeKeyAndVisible];
        }
    }
    return self;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值