忙著了將近一個(gè)月的iOS集成unity 項(xiàng)目終于完工上線了∈趸#現(xiàn)將一些經(jīng)驗(yàn)和坑記錄下來,以備下次開發(fā)使用滚澜。(由于這是寫在整個(gè)項(xiàng)目合并成功之后粗仓,并正常上線后,所以錯(cuò)誤報(bào)告的截圖無法提供设捐,只能以問題和漢子的形式記錄下來)
合并
首先是合并潦牛。其實(shí)demo合并很簡單,無非是在打包出來的Xcode工程中添加Appdelegate和VC挡育。一些基本的配置無須要修改,打包的工程已經(jīng)將所有的配置都配置完成朴爬。那么難處就是將原來很龐大的工程集成unity工程即寒。
基本配置
http://www.reibang.com/p/dc68baad8bdb 這篇博主的博文給了我們詳細(xì)的配置信息,我就不在累贅召噩。主要提兩個(gè)關(guān)鍵點(diǎn):
1:路徑配置
hearderpath和libaries path路徑最好是復(fù)試母赵。引用路徑上會(huì)出現(xiàn)Appdelegate無法讀取的問題。
2:設(shè)置unity的版本
這個(gè)版本要寫對具滴,否則會(huì)出現(xiàn)unity的材質(zhì)問題凹嘲。同時(shí)根據(jù)我們和聯(lián)想ar的大牛探討。發(fā)現(xiàn)現(xiàn)階段unity2017.2.0f1導(dǎo)出的xcode工程构韵,集成到原來app中會(huì)造成原來app崩潰的問題周蹭。所以我們將unity降至2017.1.1f1版本。
出現(xiàn)的問題及解決思路
問題1: 原app的項(xiàng)目加入了swift的混編疲恢,在集成unity工程時(shí)總是出現(xiàn)頭文件錯(cuò)誤凶朗,報(bào)錯(cuò)點(diǎn)在unityAppcontroller.h上#import Appdelegate 失效。(這里就不上圖了)显拳。
解決思路:由于插入了swift的混編文件棚愤,所以在編譯時(shí)會(huì)將swift的橋接文件也編譯,執(zhí)行的順序竟然比pch文件要高杂数,所以在我們在橋接文件中加入pch文件引用宛畦,才解決了這個(gè)問題。(強(qiáng)烈不建議混編模式)
問題2:第三方庫使用的靜態(tài)庫與unity使用的靜態(tài)庫造成沖突問題揍移。
在前面問題結(jié)局后次和,發(fā)現(xiàn)編譯能過通過,但是運(yùn)行的時(shí)候就報(bào)錯(cuò)那伐。這種可能性是有第三方庫造成的斯够。由于問題報(bào)錯(cuò)出現(xiàn)在堆棧上囚玫,很難看出是哪個(gè)造成的。這里就需要一個(gè)庫一個(gè)庫去排查读规。
解決思路:先刪除cocoapod中庫抓督,一個(gè)一個(gè)排查,如果沒有問題束亏,再加入靜態(tài)庫铃在。每加入一個(gè)編譯一次,雖然很耗時(shí)碍遍,但也沒有辦法定铜。
其他的問題:unity中導(dǎo)出工程有許多宏的判斷,但這個(gè)宏有時(shí)候?qū)φ麄€(gè)項(xiàng)目有影響怕敬,而且有些渲染的問題都會(huì)出現(xiàn)在這個(gè)宏判斷中揣炕。造成編譯無法通過。
解決思路:buiding setting中可以解決一些問題东跪。比如Bit code設(shè)置為no 這些可以谷歌到畸陡。有些問題谷歌不到的,比如宏定義下判斷渲染虽填,這里解決思路是丁恭,注釋掉宏定義,保留其中一個(gè)判斷的條件斋日。
總體調(diào)試思路
如果有沒有編譯通過牲览,看出現(xiàn)buiding setting配置上是否正確。編譯通過恶守,運(yùn)行奔潰第献。查看崩潰信息點(diǎn),逐步排查至某個(gè)函數(shù)兔港,定位之后看看是第三方庫造成的還是自己代碼所致痊硕。
unity和iOS的交互問題
這個(gè)設(shè)計(jì)到c#的寫法。不多闡述押框,主要一點(diǎn)是岔绸,unity要給出暴露接口。也就是一個(gè)靜態(tài)函數(shù)橡伞,這個(gè)函數(shù)是唯一的盒揉,不能多寫一個(gè)。我們在demo階段寫了兩個(gè)靜態(tài)函數(shù)兑徘,第一個(gè)通過第二個(gè)點(diǎn)擊崩潰刚盈。寫完后可以寫一個(gè)類,里面實(shí)現(xiàn)類方法來實(shí)現(xiàn)交互挂脑。iOS利用unitysendMessage()這個(gè)方法來實(shí)現(xiàn)交互藕漱。要注意的一點(diǎn)是欲侮,有時(shí)候由于unity的問題。導(dǎo)出的工程中不包含extension c + 自定義靜態(tài)函數(shù)接口文件肋联。這時(shí)候我們要手動(dòng)添加一個(gè).mm文件來實(shí)現(xiàn)這個(gè)接口威蕉。這樣才能進(jìn)行調(diào)用。
同時(shí)iOS與unity的沙盒讀取是可以執(zhí)行的橄仍,文件路徑要看unity工程師的函數(shù)讀取時(shí)要不要加file:// 這個(gè)開頭韧涨。demo中我們加了,但是在實(shí)際項(xiàng)目中侮繁,unity工程師換了一種寫發(fā)虑粥,從而就不要加這個(gè)函數(shù)。