1. 程式人生 > >Xcode原生專案整合Unity匯出的工程

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


注:成功的前提: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