最近需要在原生項(xiàng)目集成unity導(dǎo)出的工程打肝,并作為子模塊存在脂新,網(wǎng)上教程不少,大多數(shù)都嘗試了一遍粗梭,但都不能用争便,最終,還是總結(jié)出一套最為簡(jiǎn)單断医、快速滞乙、有效的方法。
內(nèi)容大部分轉(zhuǎn)載出自?<簡(jiǎn)書(shū)--小蝸牛吱呀之悠悠 >孩锡,因?yàn)榘姹静煌嵯约鹤隽艘恍┎糠终{(diào)整
一、背景
unity導(dǎo)出的工程躬窜,不僅可以以APP的形式獨(dú)立上線浇垦,同時(shí)也可以將其囊括成framework的形式,集成進(jìn)入我們已有的原生工程中荣挨,下面?zhèn)€將介紹已有原生上線項(xiàng)目男韧,如何集成unity朴摊。
unity的集成有三種方式:
1、直接拖拽導(dǎo)入
這種方式網(wǎng)上資料很多此虑,但我嘗試后都失敗了甚纲,也許與我這邊使用的unity版本有關(guān),此處不再贅述
2朦前、將unity作為一個(gè)target導(dǎo)入介杆,并建立關(guān)聯(lián)
此方法也資料很多,仍然沒(méi)有成功
上述兩種方法我這邊都失敗了韭寸,目前初步猜測(cè)是與使用的unity版本有關(guān)春哨,如有大神知道原因,歡迎留言~
3恩伺、將unity囊括成framework赴背,并將unity的內(nèi)容作為子項(xiàng)目導(dǎo)入到原生的workspace中,并建立兩者之間的關(guān)聯(lián)晶渠。
二凰荚、準(zhǔn)備工作
1、確認(rèn)當(dāng)前使用的unity版本是否高于2019.3.a2褒脯,如果低于此版本便瑟,本文將不適用,建議使用上述方式1番川、2胳徽。Xcode版本需要大于9.4,作者使用的是11.5版本爽彤。
2、unity導(dǎo)出環(huán)境配置
a.? 首先在Unity編輯器打開(kāi)UnityProject項(xiàng)目缚陷,選擇Menu -> Window -> Package Manager适篙,因?yàn)?.0.8版本不兼容使用Unity作為庫(kù),所以要移除Ads資源包箫爷,或更新Ads資源包到v 3.*版本嚷节。
b.? 配置Bundle Identification和Signing Team ID,此步驟非必須虎锚,可以在導(dǎo)出后再配置硫痰,但作者是統(tǒng)一配置的,所以也一并提一下窜护。
選擇Menu -> Edit -> Player Settings -> Player -> iOS設(shè)置標(biāo)簽頁(yè) -> Identification Section
c.導(dǎo)出unity項(xiàng)目時(shí)效斑,要注意區(qū)分是否支持模擬器,此處特別重要柱徙,如果弄錯(cuò)了缓屠,將導(dǎo)致后續(xù)集成失敗奇昙,如果你的原生工程是真機(jī)調(diào)試,那直接導(dǎo)出真機(jī)的工程即可敌完。
正確導(dǎo)出unity工程后储耐,就可以開(kāi)始進(jìn)行集成了
三、集成
集成分為兩個(gè)步驟:workspace配置? 滨溉、代碼配置
如果你的原生項(xiàng)目使用的是cocopods什湘,直接跳過(guò)此1.1步驟,從1.2開(kāi)始晦攒。
1.1workspace配置
此步驟為沒(méi)有使用cocopods的項(xiàng)目集成用闽撤,將原生工程和unity導(dǎo)出的工程放在同一個(gè)文件夾中,如下圖
此時(shí)勤家,關(guān)閉原生工程腹尖,打開(kāi)新建的workspace,點(diǎn)擊Xcode左下角的"+"號(hào)伐脖,將原生工程热幔、unity導(dǎo)出的工程添加進(jìn)來(lái)
導(dǎo)入完成后,請(qǐng)從步驟2繼續(xù)集成
1.2原生項(xiàng)目有使用cocopods
將unity導(dǎo)出的工程拷貝到原生工程文件夾中讼庇,得到如下圖結(jié)構(gòu)
打開(kāi)workspace绎巨,點(diǎn)擊Xcode左下角的"+"號(hào),將unity導(dǎo)出的工程添加進(jìn)來(lái)
2.將unity工程集成為UnityFramework.framework
a.展開(kāi)unity原生工程蠕啄,在products文件夾下找到UnityFramework.framework场勤,右擊show in finder
b.在workspace中選中nativeiOS工程文件,點(diǎn)擊下圖的“+”號(hào)
此操作比較關(guān)鍵歼跟,很多人找不到UnityFramework.framework和媳。打開(kāi)剛才UnityFramework.framework的路徑文件夾,直接將文件夾拖拽進(jìn)剛才的路徑查找器中
添加完成以后哈街,注意檢查一下下圖項(xiàng)
此時(shí)留瞳,你的原生空間下的Frameworks下將會(huì)出現(xiàn)UnityFramework.framework,且?guī)в姓归_(kāi)箭頭骚秦,否則就是錯(cuò)誤的
3.配置UnityFramework.framework和橋接文件
a.選中unity工程Data文件夾,按下圖配置
b.選中unity工程下的NativeCallProxy.h文件作箍,按下圖配置硬梁,注意,需要public
好多同學(xué)說(shuō)NativeCallProxy.h文件找不到胞得,這里特別說(shuō)明一下:這個(gè)文件是需要在導(dǎo)出unity工程之前荧止,將NativeCallProxy.h文件導(dǎo)入,然后再導(dǎo)出unity工程;并且這個(gè)文件是不可以在unity工程導(dǎo)出后添加的罩息,因?yàn)閡nity導(dǎo)出過(guò)程嗤详,會(huì)建立NativeCallProxy.h與unity工程的關(guān)聯(lián),后期添加則沒(méi)有這個(gè)關(guān)聯(lián)瓷炮,編譯不通過(guò)
c.build一下UnityFramework.framework葱色,這一步一定要,否則容易出現(xiàn)文件找不到的問(wèn)題
unity項(xiàng)目 - /MainApp/main.mm進(jìn)行調(diào)用娘香,指向Data文件夾所處的新位置苍狰。
[ufw setDataBundleId: "com.unity3d.framework"];
原生項(xiàng)目刪除文件
刪除AppDelegate.h ?
AppDelegate.m?改成 AppDelegate.mm
刪除Main.m
刪除ViewController.h?ViewController.m
刪除SceneDelegate.h. SceneDelegate.m
刪除main.Storyboard
報(bào)錯(cuò)1: There is no scene delegate set. A scene delegate class must be specified to use a main storyboard file.
報(bào)錯(cuò)2:[Storyboard] Unknown class ViewController in Interface Builder file.
?---因?yàn)閯h掉了自動(dòng)生成的ViewController.h/m文件,使用了自己創(chuàng)建的viewController烘绽,但是在main.storyboard中有用到系統(tǒng)生成的ViewController.h/m文件淋昭,解決方法刪掉main.storyboard,刪掉info.plist文件中main storybiard file base name。
報(bào)錯(cuò)3:Could not find a storyboard named 'Main' in bundle NSBundle
處理辦法:
1. 檢查Info.plist. 刪除整個(gè)Application Scene Manifest安接,
2.刪除Info.plist中的SceneMainSet刪除
3.新建main.Storyboard翔忽,并設(shè)置默認(rèn);
4. 如果報(bào)錯(cuò) 重啟xcode
5. 如果需要-原生項(xiàng)目 添加相機(jī)權(quán)限Info.plist- ? ? ?Privacy - Camera Usage Description
原生項(xiàng)目-打開(kāi)僅剩下的代碼文件AppDelegate.mm文件盏檐,添加以下代碼
鏈接: https://pan.baidu.com/s/1uozhy529T4tl0a2ZmUK2cg 密碼: 9c8i
主要轉(zhuǎn)載參考http://www.reibang.com/p/f919cb90821e
參考http://www.reibang.com/p/d1f1b1b68784
參考http://www.reibang.com/p/b97f9d152d6b
本篇文章是介紹集成的歇式,啟動(dòng)后需要展示unity頁(yè)面請(qǐng)參考下一篇《iOS原生融合unity—framework形式集成(二)》地址:http://www.reibang.com/p/dfd35f2a6af2