軟件環境
- Unity:2017.1.1f
- iOS:Xcode9.1
unity工程打包:
File->Build Settings->Player Settings
-
注意點:打包時為Release模式
BF1058DE-4C05-49C7-8AC6-53CCEA4B7BE2.png -
靜靜等待,打包完文件目錄如下,我們要用的為紅色部分(MapFileParser.sh)。
8DA0CA6B-26F6-45F3-A3BD-B478FF906BEA.png
整合進原有的iOS項目中
-
將Classes,Libraries,MapFileParser.sh拖入到項目中,勾選Copy items if needed,Creat groups(文件夾為黃色)
668391-5e0180a3629c64a8.jpg -
將Data拖入到項目,勾選Copy items if needed,勾選Create folder references.(文件夾為藍色)
518A01CC-1CED-4AB7-83A9-625A66DAAF9F.png
開始配置 build settings(最麻煩的開始)
Bitcode 設為NO;
在info.plist文件中刪除Main storyboard file base name鍵值對.
-
添加framework(注意Optional的兩個)添加哪些framework,請參照你從Unity導出來的項目一一添加
9863A972-F11E-4A75-BBDF-332A25310DDB.png -
添加Header Search Paths(注意路徑配置)
0FC9CA88-49E3-4598-AE47-852822E695AC.png -
添加Library Search Paths
89A950A5-141C-4BD9-B809-A7F18CBB176E.png other C Flags/other C++ Flags設置
$(inherited)
-DINIT_SCRIPTING_BACKEND=1
-fno-strict-overflow
-DRUNTIME_IL2CPP=1
-
添加 User-Defined
7BB90357-BF67-484C-923E-855547A34528.png
GCC_THUNB_SUPPORT -> NO
GCC_USE_INDIRECT_FUNCTION_CALLS -> NO
UNITY_RUNTIME_VERSION -> 你導出項目的Unity版本
UNITY_SCRIPTING_BACKEND - il2cpp
-
pch文件合并
1:如果原有項目有pch文件,可將其內容復制到unity->classes下的pch文件,再刪掉自己的pch文件。
2:也可以將unity->classes下的pch文件中的內容復制進自己的pch中。刪掉unity中的pch,配置好自己的pch文件路徑;(這里我采用的是第二種方式)
C9A97E50-234F-450A-91D1-BE8BD325E725.png 合并.m文件(因為我們的項目和unity打包出來的都有.m文件,而作為程序的主入口只能存在一個.m文件)
1:合并方式保留任意一個,注意如果保留的是我們自己的,要把.m后綴改為.mm.將原來的UnityAppController改為Appdelegate,那么啟動進入的就是我們自己的工程界面。
注意,從Build Phases刪除Classes下的 main.mm的文件.只能存在一個
-
添加 Run Script(注意.sh文件路徑)
668391-4cec4b9c662dd272.jpg
F0A015B6-6251-4377-A5BE-D828797FD36E.png
"$PROJECT_DIR/BooMoji/Unity/MapFileParser.sh"
注意 MapFileParser.sh路徑一定要正確
- Other Linker Flags(注意添加的順序,否則編譯的時候可能出現鏈接庫失敗)
至此編譯運行你的項目應該就OK了;
可能存在問題
-
Unknown type name 'NSString'
:將Compile Sources As 改為 Objective-C++ -
"Functions that differ only in their return type cannot be overloaded"
:因為objc_msgSend calls做了嚴格檢查,改成NO就可以了 - 提示函數返回值不匹配問題:Mismatched Return type->No(原因是原生的工程配置了對函數返回值做嚴格檢查,很不幸Unity3D導出的工程有些函數返回值并不規范,所以需要把xcode的配置限制放開,兼容返回值不匹配的場景)
-
Semantic Issue -> Controller may reach end of non-void function
:Mismatched Return type->No -
duplicate symbol _main in xxxx.
:常見錯誤了. main文件重復. - 各種方法未定義或者.h文件找不到:Header Search Paths路徑不正確。
- 運行后調不起unity場景問題:
- other c++ flag 配置
- metalHelp.mm文件