這篇文章中主要介紹的是通過對Unity打包出來的Xcode工程的修改來實(shí)現(xiàn)iOS原生界面到Unity界面的跳轉(zhuǎn),再從Unity界面跳轉(zhuǎn)回我們的iOS界面,與最近的我們手機(jī)上的支付寶應(yīng)用的跳轉(zhuǎn)到AR紅包界面類似(但是功能肯定和人家沒法比)。
Unity界面實(shí)現(xiàn)的功能時(shí)一個(gè)簡單的AR效果,實(shí)現(xiàn)簡單的掃描兩張圖片,然后會在手機(jī)屏幕上出現(xiàn)兩只帶有奔跑動(dòng)畫的恐龍模型,如果將這兩張圖片靠近,這兩個(gè)模型能夠?qū)崿F(xiàn)簡單的攻擊交互,將兩張圖片分開后,兩個(gè)模型又會恢復(fù)之前奔跑的動(dòng)畫。
iOS界面實(shí)現(xiàn)的功能也比較簡單,只是簡單的實(shí)現(xiàn)兩個(gè)兩個(gè)界面的跳轉(zhuǎn)功能。
這里實(shí)現(xiàn)這兩個(gè)效果的時(shí)候,我使用到的開發(fā)工具有Unity5.5版本和Xcode8.2.1,環(huán)境是MacOX。這里對版本的要求不大,但是盡量使用Unity5.0以上的版本。
一、Unity界面AR效果的實(shí)現(xiàn)
這里AR效果是借助Vuforia的SDK來實(shí)現(xiàn),有關(guān)高通的AR使用流程,這里就不再贅述了,如果有興趣可以去查看Vuforia官網(wǎng)查看文檔,當(dāng)然也可以查看這里。
1、創(chuàng)建Unity項(xiàng)目,導(dǎo)入從高通下載的資源包(這個(gè)是指上傳到高通圖片庫中要掃描的圖片的資源包),和高通自己的資源包(這個(gè)是開發(fā)包,我使用版本是6.1)。
2、刪掉系統(tǒng)的攝像機(jī),將ASset文件中Prefab中將ARCamera拖到工程里,注意這里將使用系統(tǒng)的攝像機(jī)禁用掉就可以了,因?yàn)榇龝覀兇虬蒟code工程,使用的手機(jī)的攝像頭。要修改的腳本如下圖1-1
1-13、將自己在高通官網(wǎng)申請的AppKey放到Unity工程中,如下圖
4、將Asset中的Prefab下的ImageTarget拖到場景中,選中相應(yīng)的恐龍圖片,將恐龍模型包導(dǎo)入到工程,注意這里恐龍的模型上帶有奔跑的動(dòng)畫狀體機(jī),將run設(shè)置成恐龍模型的默認(rèn)狀態(tài),這樣掃描出來的恐龍模型就會出現(xiàn)奔跑的效果。
5、要分別給恐龍模型添加tag和碰撞器和剛體,來實(shí)現(xiàn)當(dāng)兩個(gè)模型在靠近的時(shí)候能夠發(fā)生碰撞檢測,來實(shí)現(xiàn)恐龍模型從奔跑狀態(tài)切換到互相攻擊的狀態(tài),注意這里同時(shí)給模型加上AudioSource組件,來實(shí)現(xiàn)恐龍互相攻擊時(shí)發(fā)出聲音。
6、這里要?jiǎng)?chuàng)建腳本來控制模型的一系列動(dòng)畫,這里腳本的實(shí)現(xiàn)主要是兩個(gè)模型觸發(fā)行為的檢測,所以主要代碼就是觸發(fā)器方法。(注意我這里分別給兩個(gè)恐龍模型對象添加兩個(gè)tag值來進(jìn)行區(qū)分,分別是sanjiaolong 和baolong)? 下面是三角龍模型身上的腳本:
下面是暴龍模型身上的腳本最后實(shí)現(xiàn)的效果如下
二、將Unity工程打包成Xcode工程
打包后的工程使用Xcode打開后,iOS工程項(xiàng)目整個(gè)框架如下
三、修改Xcode工程中Unity界面的入口為自定義的ViewController
按照慣例,Main方法作為程序的主要入口,我們可以查看該函數(shù)的內(nèi)容實(shí)現(xiàn)
注意上面的Main方法中出現(xiàn)的UnityAppController,該類就是作為控制類來實(shí)現(xiàn)Unity在iOS上顯示的功能,在Main方法中就是將該控制器作為參數(shù)傳遞,即Main方法之后就會進(jìn)入該類執(zhí)行。
所以這是我們進(jìn)入到UnityAppController.mm,來查看該類中的方法執(zhí)行順序,可以看到這里的代碼結(jié)構(gòu)和OC的一般類的代碼結(jié)構(gòu)類似,除此之外還有一些C語言程序,作為相對底層中Unity與iOS交互的橋梁,不用管。我們需要關(guān)注的是:UnityAppController.mm中函數(shù)執(zhí)行的順序以及我們能夠在哪里加上我們自己的代碼實(shí)現(xiàn)”項(xiàng)目入口”的修改,從而做到整個(gè)程序一上來先顯示我們自己的View,然后通過自定義事件再來跳轉(zhuǎn)到Unity部分。所以整個(gè)項(xiàng)目看起來就像把Unity導(dǎo)出的工程剖開,將我們自定義的部分”塞”進(jìn)去,從而實(shí)現(xiàn)iOS與Unity3d的交互。
操作步驟
通過UnityAppController.mm類中方法的執(zhí)行順序可以看出,在執(zhí)行完StartUnity時(shí),才讓Unity界面顯示出來,所以這個(gè)方法就是在Xcode中Unity界面的入口,所以這里我們可以通過修改這個(gè)入口,從而實(shí)現(xiàn)對Unity界面顯示的控制。
1、在Xcode工程中創(chuàng)建一個(gè)OC的類,分別為HomeViewController,EnterIUnityViewController,以及單例類MyDataManager
2、各個(gè)類的作用,首先解釋一下單例類MyDataManager,在該單例中實(shí)現(xiàn)存放一些全局變量,來判斷是否進(jìn)行跳轉(zhuǎn)的判斷,以及在該單例中還聲明了存放UIViewController和UIWindow變量,因?yàn)閷?shí)現(xiàn)修改程序入口的本質(zhì)就是對window進(jìn)行修改。
PS:因?yàn)橛型瑢W(xué)一直問這里單例類里實(shí)現(xiàn)的代碼,所以這里更新下,將單例類中的.h文件和.m文件的代碼截圖放在這里。
.h文件
.m文件而HomeViewController是自定義的一個(gè)來,該類只是簡單地提供一個(gè)iOS的原生界面,在該界面上防止按鈕,實(shí)現(xiàn)向EnterUnityViewController跳轉(zhuǎn),這里使用的模態(tài)。
修改startUnity方法中代碼EnterViewController中主要實(shí)現(xiàn)點(diǎn)擊進(jìn)入U(xiǎn)nity界面的方法,同時(shí)在該類中實(shí)現(xiàn)進(jìn)入到Unity界面時(shí),在Unity界面上添加返回到之前界面按鈕的方法。在該方法里要判斷是不是第一次啟動(dòng)Unity,如果是第一次啟動(dòng)Unity界面的話,需要添加返回按鈕,如果不是的話,就通過單例中保存的Unity的viewController取出來進(jìn)行展示。具體實(shí)現(xiàn)如下
添加的返回按鈕的方法如下
3、如果是第一次啟動(dòng)Unity界面的話,還是需要到Unity自動(dòng)生成的UnityAppController中進(jìn)行修改它的入口函數(shù)的,在入口函數(shù)中進(jìn)行判斷,代碼如下:
四、將Xcode連接真機(jī)進(jìn)行測試
真機(jī)測試設(shè)置這里連接真機(jī)進(jìn)行測試的時(shí)候,現(xiàn)在蘋果提供免費(fèi)賬號也可使用真機(jī)測試,所以自己申請個(gè)AppleID就可以了,還有就是第一次連接真機(jī)的時(shí)候編譯時(shí)間較長,耐心等待
運(yùn)行后的效果如下:
最終運(yùn)行效果
這里只是簡單實(shí)現(xiàn)跳轉(zhuǎn)的效果,另外功能的實(shí)現(xiàn)Xcode工程700多兆,所以不方便上傳,文章中代碼都是截圖的。另外本篇文章的實(shí)現(xiàn)參照了CSDN上一位名為foreverhyh58的專欄的一片文章,多謝博主提供的方案,這里做了一些改動(dòng),原文地址為:http://blog.csdn.net/foreverhyh58/article/details/50353158
另外因?yàn)檫@里的Xcode工程是由Unity開發(fā)工具導(dǎo)出來的,并且其中含有高通的SDK,所以Xcode工程有大概七百兆,但是后來打包后安裝在手機(jī)的安裝包大小只有60兆左右,可見Unity對移動(dòng)端的支持真的是極好的。















