将Unity作为库集成到原⽣应⽤中:IOS篇
本⽂档说明了如何将Unity作为库包含到标准iOS应⽤程序中。您可以
阅读有关Unity作为库的了解更多信息。
开发环境要求:
• Xcode 9.4以上
• Unity版本2019.3.0以上
1.项⽬资源准备
◦ UnityProject-由Unity制作的应⽤项⽬,此项⽬build后的
iOS⼯程将⽤于集成到原⽣iOS应⽤程序中。在Assets/
Plugins/ iOS⽂件夹中,添加.mm代理插件,⽤于从Unity
Player与原⽣应⽤进⾏通信(返回原⽣界⾯)。Unity中使⽤
Application.Unload来卸载当前场景(Android,iOS通⽤)
◦ NativeiOSApp-原⽣开发的iOS应⽤程序,我们要在其中集
成Unity项⽬。定义某个特定的区域,⽐如说按钮来触发调
⽤UnityFrameworkLoad()⽅法来启动Unity应⽤。
◦ 新建⼀个⽂件夹UaaLExample(或者其他⾃定义⽂件名皆
可),并将unity项⽬⼯程和原⽣项⽬⼯程拷⻉到
UaaLExample⽬录下,为后续整合做准备。
2.将Unity项⽬编译为Xcode项⽬
只需照常⽣成Xcode项⽬即可:
• 从Unity编辑器中打开UnityProject
• 设置有效的捆绑包标识和签名团队ID(以避免在以后的步骤中
发⽣Xcode签名问题)(菜单栏 / Edit / Project Settings / Player /
iOS Setting tab / Other Settings / Identification Section)
• 选择并切换到iOS平台(菜单栏/File/BuildSetting)
◦ Build到UnityProject/iosBuild⽂件夹内
3.设置Xcode workspace
Xcode workspace 允许同时处理多个项⽬并组合成app
• 从Xcode打开NativeiOSApp.xcodeproj
• 创建名为both的⼯作空间并将其保存在UaaLExample/
both.xcworkspace。(File/New/Workspace)
• 关闭NativeiOSApp.xcodeproj项⽬,后续操作都是在刚才创建
的Workspace(both.xcworkspace)项⽬中完成。
• 将步骤2中的NativeiOSApp.xcodeproj和⽣成的UnityiPhone.xcodeproj添加到同⼀级别的⼯作区(“File” /Add files to
“both”)
4.添加UnityFramework.framework
在这⼀步中,我们以框架的形式将Unity Player添加到
NativeiOSApp,它不会改变NativeiOSApp的⾏为
• 从NativeiOSApp项⽬中选择NativeiOSApp的TARGETS
• 在“Frameworks,Libraries,and Embedded Content”中,点击+
• 选择Unity-iPhone / UnityFramework.framework
• 在“Build Phases”选项卡中,展开“Link Binary With Libraries”
• 从列表中删除UnityFramework.framework(选择它并点击-)
5.设置NativeCallProxy.h
原⽣应⽤程序实现以下⽂件中定义的NativeCallsProtocol:
• 找到并选择Unity-iPhone /Libraries/Plugins/ iOS /
NativeCallProxy.h
• 在⽬标成员身份中启⽤UnityFramework并设置公共标题可⻅性
(UnityFramework右侧的⼩下拉菜单)
6.使Data⽂件夹成为UnityFramework的⼀部分
默认情况下,Data⽂件夹是Unity-iPhone⽬标的⼀部分,我们将其更
改为将所有内容封装在⼀个框架⽂件中。
• 将数据⽂件夹的⽬标成员资格更改为UnityFramework
• (可选配置)如果要使⽤Unity-iPhone sheme,则需要通过从
Unity-iPhone / MainApp / main.mm调⽤将UnityFramework指向
数据所在的新位置: • [ufw setDataBundleId: "com.unity3d.framework"];
• // On Demand Resources are not supported in this case. To
make them work instead of the calls above
• // you need to copy Data folder to your native application
(With script at Build Phases) and
• // skip a calls above since by default Data folder expected
to be in mainBundle.
•
⼯作区已准备就绪
⼀切准备就绪,就可以对这两个项⽬运⾏和调试:选择已经集成
Unity模块的NativeiOSApp就可以测试整体的集合效果,选择UnityiPhone则单独测试Unity功能的部分)
备注:
加载 Unity播放器由UnityFramework对象控制。要获得它,请调⽤
UnityFrameworkLoad(如果不是,它将加载
UnityFramework.framework,并将单例实例返回到UnityFramework
类,请查阅Unity-iPhone / UnityFramework / UnityFramework.h的
API)。在以下位置查阅UnityFrameworkLoad:NativeiOSApp /
未加载Unity,单击“初始
化”以加载unity框架并显示
其视图。
Unity已加载并正在运⾏,中间的
彩⾊按钮由NativeiOSApp添加到
Unity View。
NativeiOSApp / MainViewController.mm或Unity-iPhone / MainApp /
main.mm
#include <UnityFramework/UnityFramework.h>
UnityFramework* UnityFrameworkLoad()
{
NSString* bundlePath = nil;
bundlePath = [[NSBundle mainBundle] bundlePath];
bundlePath = [bundlePath stringByAppendingString: @"/
Frameworks/UnityFramework.framework"];
NSBundle* bundle = [NSBundle bundleWithPath: bundlePath];
if ([bundle isLoaded] == false) [bundle load];
UnityFramework* ufw = [bundle.principalClass getInstance];
if (![ufw appController])
{
// Initialize Unity for a first time
[ufw setExecuteHeader: &_mh_execute_header];
// Keep in sync with Data folder Target Membership
setting
[ufw setDataBundleId: "com.unity3d.framework"];
}
return ufw;
}
转载注明出处:
@2020.4 by 优三帝 Mark
在“关于我”页面添加公众号,回复unity库获取源码。
博主公众号:优三帝