Version: 6000.3
语言: 中文
Bonjour 浏览器示例
iOS 上的深度链接

将 Unity 集成到原生 iOS 应用程序中

本页介绍如何使用 Unity 作为库功能将 Unity 运行时库集成到 iOS 本机应用程序中。

您可以使用此功能来包含 Unity 支持的功能,例如 3D/2D 实时渲染、AR增强现实
更多信息 术语表
在本机应用程序中体验 3D 模型交互或 2D 迷你游戏。Unity 运行时库公开了用于管理本机应用程序中加载、激活和卸载内容的时间和方式的控件。

运作方式

要将 Unity 用作 iOS 的库,请先像往常一样从 Unity 构建 Xcode 项目。有关详细信息,请参阅构建 iOS 应用程序

每个 Unity iOS Xcode 项目都有以下结构

  • UnityFramework 目标中的库部件,其中包含源插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。更多信息
    请参阅术语表
    和依赖框架。它还会产生一个UnityFramework.framework文件。
  • Unity-iPhone 目标中的精简启动器部件,包含应用表示数据并运行库。Unity-iPhone 目标对 UnityFramework 目标具有单一依赖项。

要将 Unity 集成到另一个 Xcode 项目中,您需要将两个 Xcode 项目(原生项目和 Unity 生成的项目)合并到一个 Xcode 工作区中,并将UnityFramework.framework文件添加到本机 Xcode 项目的应用程序目标的 Embedded Binaries 部分。完成此作后,您可以使用UnityFramework类来控制 Unity 运行时。

存储库包含演示如何将 Unity 集成到 Xcode 项目中的示例项目和插件,以及进一步的文档。

UnityFramework 类

您可以通过UnityFrameworkObjective-C 类,它是UnityFramework.framework:

方法 描述
+ (UnityFramework*)getInstance; Singleton 类方法,将实例返回给UnityFramework.
- (UnityAppController*)appController; 返回UnityAppController的子类UIApplicationDelegate.这是本机端的根 Unity 类,可以访问应用的 View 相关对象,例如UIView,UIViewControllers,CADisplayLinkDisplayConnection.
- (void)setDataBundleId:(const char*)bundleId; 设置 Unity 运行时应在其中查找 Data 文件夹的 Bundle。有关详细信息,请参阅有关 Data 文件夹的文档。在调用之前调用此方法runUIApplicationMainWithArgcrunEmbeddedWithArgc.
- (void)runUIApplicationMainWithArgc:(int)argc argv:(char*[])argv; 从没有其他视图的 main 方法运行 Unity 的默认方法。
- (void)runEmbeddedWithArgc:(int)argc argv:(char*[])argv appLaunchOpts:(NSDictionary*)appLaunchOpts; 当您需要在存在其他视图时运行 Unity 时,请调用此方法。
- (void)unloadApplication; 调用此 以卸载 Unity 并接收回调UnityFrameworkListener卸载完成后。Unity 将释放它占用的大部分内存,但不是全部。您将能够再次运行 Unity。
- (void)registerFrameworkListener:(id<UnityFrameworkListener>)obj; 注册接收 UnityFramework 生命周期相关事件回调的侦听器对象。
- (void)unregisterFrameworkListener:(id<UnityFrameworkListener>)obj; 取消注册侦听器对象。
- (void)showUnityWindow; 在显示非 Unity 视图时调用此方法,以显示已在运行的 Unity 视图。
- (void)pause:(bool)pause; 暂停 Unity。
- (void)setExecuteHeader:(const MachHeader*)header; 您必须在运行 Unity 之前调用此命令,以便 CrashReporter 正常工作。
- (void)sendMessageToGOWithName:(const char*)goName functionName:(const char*)name message:(const char*)msg; 此方法是 UnitySendMessage 的代理。它按名称查找游戏对象,并使用单字符串消息参数调用 functionName。
(void)quitApplication:(int)exitCode; 调用此命令以完全卸载 Unity 并接收回调UnityFrameworkListener当 Unity 退出时。Unity 将释放所有内存。

注意:在此调用之后,您将无法在同一进程中再次运行 Unity。您可以设置
quitHandlerAppController以覆盖默认进程终止。

局限性

Unity 不控制运行时生命周期,因此 Unity 作为库可能不适用于所有可能的用例。已知限制包括:


  • Unity 作为 iOS 库在 2019.3 中添加。新20193
Bonjour 浏览器示例
iOS 上的深度链接