最近需要做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