u3d與iOS交互(頁面跳轉)

需要實現功能:從iOS原生界面進入u3d界面,然后還可以從u3d界面退出返回iOS界面.
軟件版本Unity5.6.0 Xcode9.2

首先是u3d方面,如果需要從u3d界面返回iOS的話,需要iOS向u3d提供一個公共類用于兩個編輯器交互,類里是iOS自己實現的退出頁面方法.

WX20180104-140926.png

這里一般會把交互類(ViewManager 名字隨意 iOS創建 里面有void backClick()方法用于u3d界面退出,這里方法可以暫時不用寫實現,之后會在xcode工程里再寫也不遲)放在Plugins/iOS文件夾下,然后u3d會創建一個c#腳本來調用iOS的外部方法,再把腳本掛在返回按鈕上.

接下來是iOS,u3d會將工程打包成一個xcode工程,這一過程最好在mac上進行,打包出來的xcode工程結構大致如下:
WX20180104-141813.png

在Classes中可以找到UnityAppController這個類,UnityAppController和AppDelegate類似,可以對Application的整個生命周期進行管理的,而類里 - (void)startUnity:(UIApplication*)application 則是程序啟動后會調用的方法.


WX20180104-142553.png
WX20180104-143103.png

然后在startUnity方法最下面,我們就可以添加自己的代碼,讓程序啟動以后直接進入iOS的界面,
注意最好每次退出u3d界面都調用UnityPause(YES);使unity暫停,進入前則先調用UnityPause(NO);


WX20180104-143934.png

這里為跳轉界面的代碼,前面我寫了一個TabBarController作為跟控制器,并且為TabBar添加了兩個子控制器,這個代碼就不貼了,至此運行工程,應該程序直接會進入我們的TabBar控制器.

接下來我們要通過從iOS進入u3d界面,這里我用TabBarController來控制頁面跳轉,從UnityAppController中可以獲得GetAppController().rootViewController,這就是u3d的Controller,于是我在TabBarController中寫了一個block,點擊按鈕然后通過block回調,在UnityAppController中讓TabBar跳轉至u3d.


WX20180104-145511.png

GetAppController().window.rootViewController其實就是我們的tabbar,之前我們剛剛替換的.

最后我們再從u3d退出回到iOS界面就大功告成,在Libraries/Plugins/iOS中可以找到我們之前提供給u3d交互用的公共類.
WX20180104-142222.png

然后在ViewManager的預留方法中發送通知,讓UnityAppController的startUnity接收方法退出u3d界面.


WX20180104-150356.png

效果展示:
QQ20180104-151105.gif
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容