iOS - 將Unity導(dǎo)出的Xcode工程導(dǎo)入到另一個(gè)Xcode項(xiàng)目, 及常見(jiàn)報(bào)錯(cuò)的解決方法

前言

觀(guān)看以下內(nèi)容前請(qǐng)安靜的看完這段:

有個(gè)項(xiàng)目中途開(kāi)發(fā)到一半,突然需要接入AR功能,過(guò)程中遇到挺多坑以及擔(dān)憂(yōu)的球化,所以寫(xiě)下此章秽晚,不讓大家繼續(xù)往坑里掉。

開(kāi)發(fā)中的iOS項(xiàng)目使用workspace管理筒愚、第三方使用pod導(dǎo)入赴蝇,采用了OC與Swift混編。前期使用x-code8.3.3巢掺,后面使用x-code9開(kāi)發(fā)句伶,以下所有操作均在x-code9版本基礎(chǔ)上,所以不必?fù)?dān)心iOS配置不兼容Unity導(dǎo)出的Xcode工程等問(wèn)題陆淀。

Unity實(shí)現(xiàn)AR功能使用了第三方SDK--HiAR(這是啥考余,大家可以去百度),據(jù)了解市面上還有easyAR(這又是啥轧苫,大家繼續(xù)去百度)楚堤,本文中介紹的Unity導(dǎo)出的Xcode工程帶有的是HiAR,如果你使用的是easyAR含懊,也是適用的身冬,請(qǐng)不用擔(dān)心,不過(guò)easyAR容易出現(xiàn)攝像頭黑屏的情況岔乔。

集成步驟

1.Unity導(dǎo)出工程時(shí)設(shè)置bundle id要與項(xiàng)目一致(本人測(cè)試結(jié)果吏恭,可以不一致)

2.修改bit codeNO

3.刪除Main.storyboard,代碼設(shè)置控制器(方便切換window)

4.我們先來(lái)看一下Unity導(dǎo)出的Xcode工程

1.png

5.新建一個(gè)AR文件夾(所有從Unity導(dǎo)出的Xcode工程copy出的資源都保存在此,可自由變更文件夾名的重罪,但后續(xù)的路徑記得配置正確)樱哼,Classes,Libraries,MapFileParser.sh拖入到項(xiàng)目(選中Copy items if needed,選中Create groups)

MapFileParser文件記得拖進(jìn)AR文件夾下,不用引用但必須有剿配!

Data拖入到項(xiàng)目(選中Copy items if needed,選中Create folder references)搅幅,新建AR文件夾方便導(dǎo)入管理,如圖:


2.png

6.x-code9開(kāi)發(fā)版本存在bug呼胚,所以需要做如下操作茄唐,版本以下請(qǐng)忽略:

? ? 6.1添加Data文件

3.png

? ?6.2添加所有的.cpp? .mm

4.png

7.添加framework,不要遺漏了蝇更,靜態(tài)庫(kù)的引用在A(yíng)R-Library目錄下沪编,使用Add Other link添加

5.png

8.添加Header Search Paths和Library Search Paths,如果文件名AR更改了年扩,記得替換文件名

6.png
7.png

9.other C Flags -> -DINIT_SCRIPTING_BACKEND=1蚁廓,如果你項(xiàng)目這里已經(jīng)存在好多設(shè)置了,把這個(gè)新增設(shè)置移動(dòng)到最頂部

8.png

10.添加User-Defined (UNITY_RUNTIME_VERSION版本號(hào)與導(dǎo)出工程的Unity版本號(hào)一致)厨幻,此操作可以參考Unity導(dǎo)出的Xcode工程配置相嵌,不用自己手動(dòng)敲

9.png

11.Unity/Classes/Prefix.pch的代碼復(fù)制到新建的pch文件, 設(shè)置pch文件路徑

10.png

12.將Classes/main.mm全部?jī)?nèi)容復(fù)制到main.m 并把擴(kuò)展名改為.mm, 修改如下代碼

11.png

13.添加Run Script

12.png

14. 修改UnityAppController.h如下代碼

13.png

15.在A(yíng)ppDelegate.h .m中添加如下代碼

14.png


15.png
16.png

16.啟動(dòng)AR代碼

//ar界面

[(AppDelegate *)[UIApplication sharedApplication].delegate unityWindow].rootViewController.view.frame = [(AppDelegate *)[UIApplication sharedApplication].delegate window].bounds;

[[(AppDelegate *)[UIApplication sharedApplication].delegate window] addSubview:[(AppDelegate *)[UIApplication sharedApplication].delegate unityWindow].rootViewController.view];

UnityPause(false);

17.關(guān)閉AR代碼

//推出Unity界面

[[(AppDelegate *)[UIApplication sharedApplication].delegate unityWindow].rootViewController.view removeFromSuperview];

UnityPause(true);

18.AR交互代碼示例

1腿时、iOS調(diào)用unity方法

CPNFloatButton.m中示例代碼

NSString*sendMsg =@"ios to unity";

UnitySendMessage("Plane","sayHi",[sendMsgUTF8String]);

PS:此類(lèi)方法可以寫(xiě)在.m任意類(lèi)中,三個(gè)參數(shù)是必傳的饭宾,Plane跟"sayHi"必須跟unity保持一致批糟。

2、unity調(diào)用iOS方法

UnityAppController.mm示例代碼如下:

extern"C"voidshareAction(constchar*imageUrl){

//這里寫(xiě)實(shí)現(xiàn)

NSLog(@"shareAction");

NSString *strNSString;

if(imageUrl) {

strNSString = [[NSString alloc]initWithUTF8String:imageUrl];

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

[usersetObject:strNSStringforKey:@"AR_imageUrl"];

[user synchronize];

NSDictionary *dict =[[NSDictionary alloc] initWithObjectsAndKeys:@"小明",@"name",@"111401",@"number",nil];

[[NSNotificationCenter defaultCenter] postNotificationName:@"shareAction"object:dict];

}

NSLog(@"傳回來(lái)的路徑===>%@",strNSString);

}

extern"C"voidexitAction(){

//這里寫(xiě)實(shí)現(xiàn)

NSLog(@"exitAction");

[[NSNotificationCenter defaultCenter] postNotificationName:@"exitAction"object:nil];

}

extern"C"voidgoAction(constchar*url){

//這里寫(xiě)實(shí)現(xiàn)

NSLog(@"goAction");

NSString *strNSString;

if(url) {

strNSString = [[NSString alloc]initWithUTF8String:url];

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

[usersetObject:strNSStringforKey:@"AR_url"];

[user synchronize];

[[NSNotificationCenter defaultCenter] postNotificationName:@"goAction"object:nil];

}

NSLog(@"傳回來(lái)的地址===>%@",strNSString);

}

PS:unity調(diào)用iOS寫(xiě)了幾個(gè)方法看铆,iOS就必須提供調(diào)用的方法徽鼎,否則編譯會(huì)報(bào)錯(cuò)的,而且此類(lèi)方法只能寫(xiě)在.mm文件中弹惦。

具體參考:http://blog.csdn.net/huayu_huayu/article/details/51822971

可能有人會(huì)問(wèn)為什么這樣啟動(dòng)AR以及關(guān)閉AR纬傲,而不是去切換Window呢,其一切換Window會(huì)崩潰肤频,其二使用通知交互有問(wèn)題叹括。


PS:在集成過(guò)程中可能遇到的報(bào)錯(cuò)以及解決辦法,這個(gè)一定要看宵荒,因?yàn)檫@涉及到build setting里面的設(shè)置汁雷,特別是最后一個(gè)設(shè)置,我集成的過(guò)程中一直卡在HIAR的SDK無(wú)法編譯問(wèn)題报咳。

1.報(bào)錯(cuò)Control reaches end of non-void function侠讯,解決辦法:Mismatched Return Type改為NO

17.png

2.報(bào)錯(cuò)↓

18.png

解決方案↓

19.png

3.報(bào)錯(cuò)↓

20.png

解決方案↓

比較尷尬的是VideoPlayer重名了,得修改本地的VideoPlayer修改為JKVideoPlayer暑刃,搜索#import "VideoPlayer.h"替換使用過(guò)的方法

4.報(bào)錯(cuò)↓

21.png

解決方案↓

22.png

至此祝編譯成功......希望能幫到你.....

可能你的項(xiàng)目在開(kāi)發(fā)厢漩,untiy的代碼也還在開(kāi)發(fā),你們需要不斷的集成打包測(cè)試岩臣,那么恭喜你溜嗜,你只需要移除AR文件夾的5個(gè)文件,繼續(xù)參考步驟6.


參考鏈接1:http://blog.csdn.net/huayu_huayu/article/details/51822971

參考鏈接2:http://blog.csdn.net/dylan_lwb_/article/details/51452470

謝謝以上作者架谎。


效果預(yù)覽↑
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炸宵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谷扣,更是在濱河造成了極大的恐慌土全,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件会涎,死亡現(xiàn)場(chǎng)離奇詭異裹匙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)末秃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)概页,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蛔溃,你說(shuō)我怎么就攤上這事绰沥。” “怎么了贺待?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵徽曲,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我麸塞,道長(zhǎng)秃臣,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任哪工,我火速辦了婚禮奥此,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雁比。我一直安慰自己稚虎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布偎捎。 她就那樣靜靜地躺著蠢终,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茴她。 梳的紋絲不亂的頭發(fā)上寻拂,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音丈牢,去河邊找鬼祭钉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛己沛,可吹牛的內(nèi)容都是我干的慌核。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼申尼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼遂铡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起晶姊,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扒接,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后们衙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钾怔,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蒙挑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宗侦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忆蚀,死狀恐怖矾利,靈堂內(nèi)的尸體忽然破棺而出姑裂,到底是詐尸還是另有隱情,我是刑警寧澤男旗,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布舶斧,位于F島的核電站,受9級(jí)特大地震影響察皇,放射性物質(zhì)發(fā)生泄漏茴厉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一什荣、第九天 我趴在偏房一處隱蔽的房頂上張望矾缓。 院中可真熱鬧,春花似錦稻爬、人聲如沸宁炫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至歉备,卻和暖如春厂镇,著一層夾襖步出監(jiān)牢的瞬間诀拭,已是汗流浹背疫向。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留商佑,地道東北人锯茄。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像茶没,于是被迫代替她去往敵國(guó)和親肌幽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容