您的位置:首页 > 移动开发 > Unity3D

只将unity的UI控件添加到iOS视图层上,不显示unity原生的背景(一)

2017-04-07 09:59 1216 查看
最近需要做LBS类的游戏,需要结合高德地图,但是高德地图没有unity的相关库,所以有个思路就是将unity视图背景变成透明的,然后添加到iOS视图层的上面,这样既能显示iOS视图,又能显示unity视图上的UI控件。

找了unity论坛里面的方法,发现可行,运行的还可以,unity和iOS上的控件都可以选中。

废话不多说,说一下具体方法。

首先打开unity一个项目,将摄像机改成DepthOnly模式,

然后添加自己想要的UI控件及页面逻辑,

这里添加一个与iOS交互的方法,当点击的时候调用iOS中的一个方法,能够将unityWindow设置为iOS原生的window,这样是为了将unity层级显示在iOS上面。

(关于unity调用iOS方法的具体代码,参考另一篇文章)

导出成xcode项目。

修改一句代码,这句代码的作用就是将unity背景层透明的方法。

在metalHelp.mm文件中设置,

surface->layer.opaque = NO;

CGFloat backgroundColorValues[] = {0,0,0,0};

然后自己创建一个BaseViewController,

然后更改视图

- (void)creatUI{

UIWindow * window = [UIApplication sharedApplication].keyWindow;
_mapView = [[MAMapView alloc] initWithFrame:window.bounds];
[_mapView setDelegate:self];
[window addSubview:_mapView];

BaseViewController * vc = [[BaseViewController alloc]init];
window.rootViewController = vc;
[vc.view addSubview:UnityGetGLView()];
UnitySendMessage([@"Canvas" UTF8String], [@"initBtn" UTF8String], [@"yes" UTF8String]);
}

这样就能做到即显示iOS界面,又显示unity控件了,而且添加模型后,也并没有渲染卡顿。
当然如果要点击响应unity控件,还需要添加修改一些代码,这个在下一篇文章说。

当然,以后还会说一下Android怎么实现相关的方法的。


这个界面就是效果图,高德地图是iOS原生显示的,剩下的“开启地图”,“定位”,“开始扫描”,“云彩”,“cube模型”都是unity的UI
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: