只將unity的UI控件添加到iOS視圖層上,不顯示unity原生的背景(一)

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

發佈了25 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章