注意上面的Main方法中出現的UnityAppController,該類就是作為控制類來實現Unity在iOS上顯示的功能,在Main方法中就是將該控制器作為參數傳遞,即Main方法之后就會進入該類執行。
所以這是我們進入到UnityAppController.mm,來查看該類中的方法執行順序,可以看到這里的代碼結構和OC的一般類的代碼結構類似,除此之外還有一些C語言程序,作為相對底層中Unity與iOS交互的橋梁,不用管。我們需要關注的是:UnityAppController.mm中函數執行的順序以及我們能夠在哪里加上我們自己的代碼實現”項目入口”的修改,從而做到整個程序一上來先顯示我們自己的View,然后通過自定義事件再來跳轉到Unity部分。所以整個項目看起來就像把Unity導出的工程剖開,將我們自定義的部分”塞”進去,從而實現iOS與Unity3d的交互。
操作步驟
通過UnityAppController.mm類中方法的執行順序可以看出,在執行完StartUnity時,才讓Unity界面顯示出來,所以這個方法就是在Xcode中Unity界面的入口,所以這里我們可以通過修改這個入口,從而實現對Unity界面顯示的控制。
1、在Xcode工程中創建一個OC的類,分別為HomeViewController,EnterIUnityViewController,以及單例類MyDataManager
2、各個類的作用,首先解釋一下單例類MyDataManager,在該單例中實現存放一些全局變量,來判斷是否進行跳轉的判斷,以及在該單例中還聲明了存放UIViewController和UIWindow變量,因為實現修改程序入口的本質就是對window進行修改。
PS:因為有同學一直問這里單例類里實現的代碼,所以這里更新下,將單例類中的.h文件和.m文件的代碼截圖放在這里。
.h文件
.m文件
而HomeViewController是自定義的一個來,該類只是簡單地提供一個iOS的原生界面,在該界面上防止按鈕,實現向EnterUnityViewController跳轉,這里使用的模態。
修改startUnity方法中代碼
EnterViewController中主要實現點擊進入Unity界面的方法,同時在該類中實現進入到Unity界面時,在Unity界面上添加返回到之前界面按鈕的方法。在該方法里要判斷是不是第一次啟動Unity,如果是第一次啟動Unity界面的話,需要添加返回按鈕,如果不是的話,就通過單例中保存的Unity的viewController取出來進行展示。具體實現如下
添加的返回按鈕的方法如下
3、如果是第一次啟動Unity界面的話,還是需要到Unity自動生成的UnityAppController中進行修改它的入口函數的,在入口函數中進行判斷,代碼如下: