经历了几天的不断尝试解决各种报错和网上寻得的资料最终成功在iOS项目中集成Unity3D,现有的资料都比较老,多数不适用或者说集成完报很多错误。
言归正传,目前我所做的集成是基于Xcode10.1(最新为10.2),Unity2018.2.21f1 (建议先在文章最后看一下关于UnityPlayerSetting的设置)
-
步骤一:新建文件夹,里面存放两个文件,一个是Xcode Native工程(以下简称A工程),另一个是Unity导出的Xcode工程(以下简称B工程)
-
步骤二:在B工程中找到Classes,Libraries和Data拷贝到A工程的根目录中,然后将Classes,Libraries通过Add file的方式添加到项目中,注意勾选Create groups;data也添加到项目中勾选Create folder references。
-
步骤三:在项目根目录中新建PCH文件,然后将Classes下的Prefix.pch文件中的全部代码复制到刚才创建的PCH文件中,并在代码中添加#import "UnityAppController.h"
将PCH文件的路径添加到Target->Build Setting->Prefix Header中 -
步骤四:在Target->Build Setting中进行以下配置:
a.设置Enable Bitcode:NO;
b.Other Linker Flags添加(注意:一定要按顺序)-weak_framework,CoreMotion,-weak-lSystem,-licucore
c.对Classes和Libraries的路径进行配置;
在Header Search Paths中添加:
$(SRCROOT)/Classes
$(SRCROOT)/Classes/Native
$(SRCROOT)/Libraries/libil2cpp/include
在Library Search Paths中添加:
$(PROJECT_DIR)/Libraries(如有,则不需要重复添加)
$(PROJECT_DIR)/Libraries/Plugins/iOS
d.Other C Flags添加 -DINIT_SCRIPTING_BACKEND=1 和 -DRUNTIME_IL2CPP=1
e.设置Enable C++ Runtime Types:NO
f.设置Overriding Deprecated Objective-C Methods:Yes
g.设置Unintentional Root Class:Yes
h.点击如下图的+号,添加4个Add User-Defined Setting
GCC_THUMB_SUPPORT : NOGCC_USE_INDIRECT_FUNCTION_CALLS : NO
UNITY_RUNTIME_VERSION : 2018.2.21f1(以自己Unity实际版本号为准)
UNITY_SCRIPTING_BACKEND : il2cpp
-
步骤五:在Target->Build Phases中导入以下库(建议以自己Unity导出的Xcode项目对应添加):
Classes文件夹下的main.mm中全部代码复制到Xcode生成的main.m中;将main.mm代码中的"UnityAppController"修改成"AppDelegate";
将main.m修改为main.mm然后进行如图操作:-
步骤六:把Classes文件夹下的UnityAppController.h进行如图修改(报错是因为AppDelegate中还未做修改)
-
步骤七:对AppDelegate进行如下修改:
-
步骤八:最后实现iOS界面和Unity界面相互切换
a.iOS界面切换到Unity界面; 在ViewController.m中创建一个button,点击触发方法如下:
b.Unity界面切换到iOS界面; 在unityWindow上添加一个button,如下:
补充Unity3D中需要对PlayerSettings做的设置:
1.取消Auto Graphics API的勾选并移除Metal选择OpenGLES2(补充:取消勾选,选择Metal也能成功,根据相关报错信息自行修改)
2.取消Strip Engine Code的勾选
报错补充: 错误1:
只需要找到DeviceSettings.mm文件添加默认return 值错误2:
改写成如下图所示即可错误3:
需要在Other C Flags里添加支持.net4.0最终效果
可以动手尝试,如有错误欢迎批评指正。联系方式QQ:877479310