经历了几天的不断尝试解决各类报错和网上寻得的资料最终成功在iOS项目中集成Unity3D,现有的资料都比较老,多数不适用或者说集成完报不少错误。
言归正传,目前我所作的集成是基于Xcode10.1(最新为10.2),Unity2018.2.21f1 (建议先在文章最后看一下关于UnityPlayerSetting的设置)ui
步骤一:新建文件夹,里面存放两个文件,一个是Xcode Native工程(如下简称A工程),另外一个是Unity导出的Xcode工程(如下简称B工程).net
步骤二:在B工程中找到Classes,Libraries和Data拷贝到A工程的根目录中,而后将Classes,Libraries经过Add file的方式添加到项目中,注意勾选Create groups;data也添加到项目中勾选Create folder references。3d
步骤三:在项目根目录中新建PCH文件,而后将Classes下的Prefix.pch文件中的所有代码复制到刚才建立的PCH文件中,并在代码中添加#import "UnityAppController.h" code
步骤四:在Target->Build Setting中进行如下配置:cdn
a.设置Enable Bitcode:NO;blog
b.Other Linker Flags添加(注意:必定要按顺序)-weak_framework,CoreMotion,-weak-lSystem,-licucoreip
c.对Classes和Libraries的路径进行配置;get
在Header Search Paths中添加:it
$(SRCROOT)/Classesio
$(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_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";
步骤六:把Classes文件夹下的UnityAppController.h进行如图修改(报错是由于AppDelegate中还未作修改)
步骤七:对AppDelegate进行以下修改:
步骤八:最后实现iOS界面和Unity界面相互切换
a.iOS界面切换到Unity界面; 在ViewController.m中建立一个button,点击触发方法以下:
补充Unity3D中须要对PlayerSettings作的设置:
1.取消Auto Graphics API的勾选并移除Metal选择OpenGLES2(补充:取消勾选,选择Metal也能成功,根据相关报错信息自行修改)
2.取消Strip Engine Code的勾选
报错补充: 错误1:
错误2:
错误3:
最终效果
能够动手尝试,若有错误欢迎批评指正。联系方式QQ:877479310