将 Unity 集成到原生 iOS 应用程序中
Integrate the Unity Runtime Library into iOS applications.
阅读时间5 分钟最后更新于 1 个月前
本页说明如何使用“Unity 用作库”(Unity as a Library) 功能将 Unity 运行时库集成到 iOS 原生应用程序中。
使用此功能可以在原生应用程序中包含 Unity 支持的功能(例如 3D/2D 实时渲染、AR 体验、3D 模型交互或 2D 迷你游戏)。Unity 运行时库提供了多种控件来管理何时以及如何在原生应用程序中加载、激活和卸载内容。
工作原理
要将 Unity as a Library 用于 iOS,请先照常从 Unity 构建 Xcode 项目。有关更多信息,请参阅构建 iOS 应用程序。
每个 Unity iOS Xcode 项目具有以下结构:
- UnityFramework 目标中的一个库部分,其中包含源、插件和相关框架。它还会生成 文件。
UnityFramework.framework - Unity-iPhone 目标中的一个瘦启动器 (Thin Launcher) 部分,其中包含了应用程序表示数据并会运行该库。Unity-iPhone 目标对 UnityFramework 目标具有单一依赖关系。
要将 Unity 集成到另一个 Xcode 项目中,必须将两个 Xcode 项目(原生项目和 Unity 生成的项目)合并到一个 Xcode 工作空间中,并将 文件添加到原生 Xcode 项目的应用程序 (Application) 目标的嵌入式二进制文件 (Embedded Binaries) 部分中。完成此操作后,可以使用 类来控制 Unity 运行时。
UnityFramework.frameworkUnityFramework此代码仓库包含示例项目和插件(演示如何将 Unity 集成到 Xcode 项目中)以及更多文档。
UnityFramework 类
可通过 Objective-C 类(该类是 的主体类)的实例来控制 Unity 运行时:
UnityFrameworkUnityFramework.framework方法 | 描述 |
|---|---|
| 单例类方法,可将实例返回到 |
| 可返回 |
| 设置捆绑包,Unity 运行时应在其中查找 Data 文件夹。有关更多信息,请参阅有关 Data 文件夹的文档。请在调用 |
| 从没有其他视图的主要方法中运行 Unity 的默认方式。 |
| 存在其他视图时,如果需要运行 Unity,请调用此方法。 |
| 调用此方法可卸载 Unity,并在卸载完成后接收对 |
| 注册监听器对象,用于接收 UnityFramework 生命周期相关事件的回调。 |
| 取消注册监听器对象。 |
| 在显示非 Unity 视图时调用此方法,也会显示已经在运行的 Unity 视图。 |
| 暂停 Unity。 |
| 必须在运行 Unity 之前调用此命令,CrashReporter 才能正常工作。 |
| 此方法是 UnitySendMessage 的代理。它通过名称查找游戏对象,并使用单字符串消息参数来调用 functionName。 |
| 调用此方法可完全卸载 Unity,并在 Unity 退出时接收对 **注意:**在此调用之后,无法在同一进程中再次运行 Unity。可以在 |
限制
Unity 不会控制运行时生命周期,因此 Unity as a Library 可能并不适用于所有可能的用例。已知限制包括:
-
Unity as a Library 仅支持全屏渲染,不支持在部分屏幕中渲染。
-
您不能加载多个 Unity 运行时实例。
-
在原生 iOS 应用程序中使用 Unity as a Library 时,无法通过 iOS 播放器设置 (iOS Player settings) 调整设备的状态栏可见性。请考虑使用以下任一方案来实现相同目的:
- 在项目的 info.plist 文件中设置 或
UIStatusBarHidden键。UIViewControllerBasedStatusBarAppearance - 设置视图控制器属性 并调用
prefersStatusBarHidden方法。setNeedsStatusBarAppearanceUpdate - 设置视图控制器属性 。
childViewControllerForStatusBarHidden
- 在项目的 info.plist 文件中设置