Xcode原生項目集成Unity導出的工程


注:成功的前提:Unity導出的Xcode工程可以編譯。

1、 創建好工程之後,將Unity導出的Xcode工程的以下文件夾複製到我們新建的工程中。

Unity導出:Unity導出 
新建工程:新建工程

複製到我們新建的工程中(Command + C,Command + V)

複製之後的目錄

2、 搜索Class/Native目錄下的所有.h文件,如下圖

Native目錄
搜索方式

之後新建一個文件夾,隨便起名,然後將剛纔搜索到的所有.h文件剪切到(直接拖)新建的文件夾。 
Command + A(全選)然後拖。

拖走

此時Class/Native目錄下已經沒有.h文件。這麼做的目的只是方便工程中引用,之後我們還要拖回來。

3、 打開新建的工程,將Class、Libraries拖進根目錄,最好與finder中的目錄結構一樣。

導入工程

注意選項不要選錯

選項

完成後如圖所示

工程目錄 

4、 將Data文件夾拖入工程,創建引用(注意選項)

Data選項

如此一來,工程目錄如下:

工程目錄

對應的finder中的結構

finder目錄

5、 刪除Libraries目錄下的libil2cpp文件夾,選中此文件夾,按delete,或者右鍵-delete,選擇Remove References。

libil2cpp 
選項

然後在finder中,把我們剛移出去的.h從臨時文件夾移回Class/Native文件夾:

移回去

6、 將main.m改名爲main.mm

將Class目錄下的main.mm的內容全選,複製粘貼到我們剛改名的main.mm下面,之前的main.mm僅留下:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
  • 1
  • 2
  • 1
  • 2

在工程中,刪除Class目錄下的main.mm文件,直接move to trash 
此時有報錯,不用理會

7、 添加動態庫引用,這裏建議對照導出的unity工程的配置來配置。我這裏就對照着添加了。注:默認的可能就會有幾個,沒關係不影響的。不要刪,只管添加。

這裏需要注意:AVFoundation、CoreMotion、iAd的Status都是Optional,其他的都是Required

添加動態庫

配置完成後:

配置完成

8、 找到Build Settings,進行如下配置:

關閉bitcode

關閉BitCode

在other linker flags中,添加四條記錄: 
$(inherited) 
-weak_framework 
CoreMotion 
-weak-lSystem

添加4條記錄

配置Header search paths

header

配置Library search Paths

library

這兩條建議與Unity導出的工程保持一致,當然,注意一下目錄結構。如果你當初沒有按照我說的放在根目錄,這裏一定要注意。(路徑是按照finder來說的)。 
一般來說Library Search Path是不用改的,系統會自動設置。

path

在Other C Flags中添加,C++那一行會自動添加

Other C Flags

修改編譯器:

C99

設置預編譯頭文件

PrefixHeader

可以直接從左邊拖過來,設置完成之後:

設置完成

修改OC警告

修改OC警告

修改所有語言警告:

所有語言 
Unreachable Code
Mismatched return

在user-Defined,添加:

GCC_THUMB_SUPPORT NO 
GCC_USE_INDIRECT_FUNCTION_CALLS NO 
UNITY_RUNTIME_VERSION 5.6.0f3 
注:此參數參考Unity導出的工程中的值,不能亂填。 
UNITY_SCRIPTING_BACKEND il2cpp

點擊 +

user-defined

9、 設置Build Phases

點擊 + 添加腳本:

添加腳本

注:這裏的文字也可以從Unity導出的工程中複製

腳本

10、 在Prefix.pch中,添加一行:

修改頭文件

注:如果工程中原來就有預編譯頭文件,建議合併到這裏。

11、 注意這裏選擇:

編譯配置

Command + B編譯,成功!

常見問題:

1. 如果編譯器報錯說沒有權限訪問MapFileParser.sh這個腳本,打開終端,cd你的工程目錄(其實就是MapFileParser.sh所在目錄),回車。然後輸入以下命令: 
sudo chmod +x MapFileParser.sh 
然後輸入登錄密碼,回車。再編譯試試。

如果有其他問題,歡迎評論,我們一起討論。

2. 因爲我們的Unity是延遲加載的,所以如果出現所有的動畫(比如導航控制器push動畫)消失的問題,全局搜索 [UIView setAnimationsEnabled: 然後依次點進去,註釋掉就好了。 
全局搜索

註釋掉

建議把搜索到的結果一個一個都註釋掉。

Demo:鏈接: https://pan.baidu.com/s/1eRYeQR4 密碼: mnrf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章