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















