美文网首页Unity技术分享Unity跨平台技术分享
Unity3D工程并入iOS工程总结及问题梳理

Unity3D工程并入iOS工程总结及问题梳理

作者: 暗尘随码去 | 来源:发表于2017-11-29 12:20 被阅读72次

软件环境

  • 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(注意添加的顺序,否则编译的时候可能出现链接库失败)
BBDE39A1-4B9D-4709-A178-58D09DAC3104.png

至此编译运行你的项目应该就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文件

相关文章

网友评论

本文标题:Unity3D工程并入iOS工程总结及问题梳理

本文链接:https://www.haomeiwen.com/subject/uvlebxtx.html