這篇文章中主要介紹的是通過對(duì)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è)簡(jiǎn)單的AR效果宙拉,實(shí)現(xiàn)簡(jiǎn)單的掃描兩張圖片谢揪,然后會(huì)在手機(jī)屏幕上出現(xiàn)兩只帶有奔跑動(dòng)畫的恐龍模型删顶,如果將這兩張圖片靠近咬清,這兩個(gè)模型能夠?qū)崿F(xiàn)簡(jiǎn)單的攻擊交互闭专,將兩張圖片分開后,兩個(gè)模型又會(huì)恢復(fù)之前奔跑的動(dòng)畫旧烧。
iOS界面實(shí)現(xiàn)的功能也比較簡(jiǎn)單影钉,只是簡(jiǎn)單的實(shí)現(xiàn)兩個(gè)兩個(gè)界面的跳轉(zhuǎn)功能。
這里實(shí)現(xiàn)這兩個(gè)效果的時(shí)候粪滤,我使用到的開發(fā)工具有Unity5.5版本和Xcode8.2.1斧拍,環(huán)境是MacOX。這里對(duì)版本的要求不大杖小,但是盡量使用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)榇龝?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)畫狀體機(jī)广鳍,將run設(shè)置成恐龍模型的默認(rèn)狀態(tài),這樣掃描出來的恐龍模型就會(huì)出現(xiàn)奔跑的效果吓妆。
5赊时、要分別給恐龍模型添加tag和碰撞器和剛體,來實(shí)現(xiàn)當(dāng)兩個(gè)模型在靠近的時(shí)候能夠發(fā)生碰撞檢測(cè)行拢,來實(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ā)行為的檢測(cè)鬼悠,所以主要代碼就是觸發(fā)器方法浙滤。(注意我這里分別給兩個(gè)恐龍模型對(duì)象添加兩個(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方法之后就會(huì)進(jìn)入該類執(zhí)行。
所以這是我們進(jìn)入到UnityAppController.mm墅茉,來查看該類中的方法執(zhí)行順序命黔,可以看到這里的代碼結(jié)構(gòu)和OC的一般類的代碼結(jié)構(gòu)類似,除此之外還有一些C語言程序就斤,作為相對(duì)底層中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)對(duì)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ì)就是對(duì)window進(jìn)行修改。
PS:因?yàn)橛型瑢W(xué)一直問這里單例類里實(shí)現(xiàn)的代碼捍掺,所以這里更新下撼短,將單例類中的.h文件和.m文件的代碼截圖放在這里。
.h文件
.m文件而HomeViewController是自定義的一個(gè)來挺勿,該類只是簡(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界面的話吠撮,需要添加返回按鈕尊惰,如果不是的話,就通過單例中保存的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)行測(cè)試
真機(jī)測(cè)試設(shè)置這里連接真機(jī)進(jìn)行測(cè)試的時(shí)候削彬,現(xiàn)在蘋果提供免費(fèi)賬號(hào)也可使用真機(jī)測(cè)試全庸,所以自己申請(qǐng)個(gè)AppleID就可以了,還有就是第一次連接真機(jī)的時(shí)候編譯時(shí)間較長融痛,耐心等待
運(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開發(fā)工具導(dǎo)出來的,并且其中含有高通的SDK目派,所以Xcode工程有大概七百兆坤候,但是后來打包后安裝在手機(jī)的安裝包大小只有60兆左右,可見Unity對(duì)移動(dòng)端的支持真的是極好的企蹭。