软件环境
- 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
05CA567D-2891-4511-ADA3-39069DF4108C.png
3D14A85A-F3F9-44D8-AF61-2B0B7CD3DBC2.png
-
添加 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
66A3031F-C9A7-45F5-A1B4-7AE3673C2E20.png
-
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的文件.只能存在一个
C44DB584-CBAF-475F-81E8-A11BACCE5FFE.png
-
添加 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文件
网友评论