由于公司項(xiàng)目的需要,需要將unity3D工程跟原生工程合并, 所以不得不接觸unity3D, 本文是將unity3D導(dǎo)出的iOS代碼移植到Xcode本地建的工程中, 上代碼:
首先,總體來說,總的步驟分為兩大塊, 第一,你需要從unity3D中導(dǎo)出Xcode第二,你需要將導(dǎo)出的iOS代碼部分移植到你想要的本地iOS項(xiàng)目中.
第一部分, unity3D導(dǎo)出Xcode項(xiàng)目
1.打開你的unity工程,然后點(diǎn)擊上邊菜單欄file中的build settings

2. 接著會彈出一個(gè)如下的框, 點(diǎn)擊switch platform 選擇iOS平臺,

3. 點(diǎn)擊player settings... 配置參數(shù)如下圖

4. 配置完成后點(diǎn)擊build, 等待完成,這個(gè)過程可能會時(shí)間長點(diǎn),稍安勿躁, 完成之后是這樣的

5.然后打開文件iOS文件夾是這樣的,我們需要的重要核心的代碼都在畫紅線的這幾個(gè)文件夾中,所以,我們下面就需要把這幾個(gè)畫紅線的文件夾拷貝到我們需要的iOS原生項(xiàng)目中.

第一部分導(dǎo)出Xcode工程已經(jīng)完成,這部分很簡單, 接著,我們就開始第二大部分,也是很容易出錯(cuò)的地方,尤其是配置需要注意.
第二部分, unity3D導(dǎo)出Xcode項(xiàng)目導(dǎo)入到原生的iOS項(xiàng)目中
1.Unity導(dǎo)出的工程中的bundleId要和你本地iOS項(xiàng)目的id一致
2.修改bit code為NO
3.刪除Main.storyboard,代碼設(shè)置控制器(方便切換window)
4.將Classes,Libraries,MapFileParser.sh拖入到項(xiàng)目(選中Copy items if needed,選中Create groups)
將Data拖入到項(xiàng)目(選中Copy items if needed,選中Create folder references)
注意:文件拖進(jìn)工程的方式不完全一樣,注意勾選的地方

5.添加framework(注意Optional的三個(gè))


6.添加Header Search Paths和Library Search Paths

7.other C Flags -> -DINIT_SCRIPTING_BACKEND=1

8.添加User-Defined (UNITY_RUNTIME_VERSION版本號與導(dǎo)出工程的Unity版本號需要一致)

9.添加Run Script

10.把Unity/Classes/Prefix.pch的代碼復(fù)制到新建的pct文件, 并把classes文件夾下的pct文件刪除,注意,這里的刪除并不是徹底的刪除, 而是從列表中刪除,選擇中間這個(gè), 以下步驟中所說的刪除都是這個(gè)意思,請牢記哈!

11. 將Classes/main.mm全部內(nèi)容復(fù)制到main.m 并把擴(kuò)展名改為.mm

12. 修改UnityAppController.h

13.在AppDelegate.h .m中添加如下代碼



到這里基本上已經(jīng)完成從本地iOS跳轉(zhuǎn)到Unity項(xiàng)目里了,接下來,是我在做的過程中遇到的問題.
1.Unknown type name 'UnityViewControllerBase'
解決辦法就是把它改成UIViewController
2.iOS本地應(yīng)用跳轉(zhuǎn)unity的時(shí)候出現(xiàn)黑屏
原因是你的u3d工程集成了EasyAR插件,而這個(gè)插件下有個(gè)Assets/Plugins/iOS/EasyARAppController.mm,
@interface EasyARAppController : UnityAppController,這是整個(gè)app啟動(dòng)時(shí)的第一個(gè)controller,自己修改合并這個(gè)controller就OK了
或者是將EasyARAppController.mm的內(nèi)容復(fù)制到你的自定義的子類中去,然后刪除引用也是OK的
看下圖

在UnityAppController.mm里這個(gè)方法中寫

然后就OK了
以上就是全部了呦,歡迎大家指正, 多多交流!!!