需要實現功能:從iOS原生界面進入u3d界面,然后還可以從u3d界面退出返回iOS界面.
軟件版本Unity5.6.0 Xcode9.2
首先是u3d方面,如果需要從u3d界面返回iOS的話,需要iOS向u3d提供一個公共類用于兩個編輯器交互,類里是iOS自己實現的退出頁面方法.
這里一般會把交互類(ViewManager 名字隨意 iOS創建 里面有void backClick()方法用于u3d界面退出,這里方法可以暫時不用寫實現,之后會在xcode工程里再寫也不遲)放在Plugins/iOS文件夾下,然后u3d會創建一個c#腳本來調用iOS的外部方法,再把腳本掛在返回按鈕上.
接下來是iOS,u3d會將工程打包成一個xcode工程,這一過程最好在mac上進行,打包出來的xcode工程結構大致如下:在Classes中可以找到UnityAppController這個類,UnityAppController和AppDelegate類似,可以對Application的整個生命周期進行管理的,而類里 - (void)startUnity:(UIApplication*)application 則是程序啟動后會調用的方法.
然后在startUnity方法最下面,我們就可以添加自己的代碼,讓程序啟動以后直接進入iOS的界面,
注意最好每次退出u3d界面都調用UnityPause(YES);使unity暫停,進入前則先調用UnityPause(NO);
這里為跳轉界面的代碼,前面我寫了一個TabBarController作為跟控制器,并且為TabBar添加了兩個子控制器,這個代碼就不貼了,至此運行工程,應該程序直接會進入我們的TabBar控制器.
接下來我們要通過從iOS進入u3d界面,這里我用TabBarController來控制頁面跳轉,從UnityAppController中可以獲得GetAppController().rootViewController,這就是u3d的Controller,于是我在TabBarController中寫了一個block,點擊按鈕然后通過block回調,在UnityAppController中讓TabBar跳轉至u3d.
GetAppController().window.rootViewController其實就是我們的tabbar,之前我們剛剛替換的.
最后我們再從u3d退出回到iOS界面就大功告成,在Libraries/Plugins/iOS中可以找到我們之前提供給u3d交互用的公共類.然后在ViewManager的預留方法中發送通知,讓UnityAppController的startUnity接收方法退出u3d界面.