此页面介绍如何将 Unity 运行时库集成到使用 Unity 作为库功能的 iOS 原生应用程序中。
您可以使用此功能在您的原生应用程序中包含由 Unity 提供支持的功能,例如 3D/2D 实时渲染、AR增强现实 更多信息
参见 术语表 体验、3D 模型交互或 2D 小游戏。Unity 运行时库公开了用于管理何时以及如何在原生应用程序中加载、激活和卸载内容的控件。
要将 Unity 作为 iOS 的库使用,首先像往常一样从 Unity 构建您的 Xcode 项目。有关更多信息,请参阅 构建 iOS 应用程序。
每个 Unity iOS Xcode 项目都具有以下 结构
UnityFramework.framework
文件。要将 Unity 集成到另一个 Xcode 项目中,您需要将这两个 Xcode 项目(原生项目和 Unity 生成的项目)合并到一个 Xcode 工作区中,并将 UnityFramework.framework
文件添加到原生 Xcode 项目的 Application 目标的 Embedded Binaries 部分。完成此操作后,您可以使用 UnityFramework
类来控制 Unity 运行时。
此 存储库 包含示例项目和插件,演示如何将 Unity 集成到 Xcode 项目中,以及进一步的文档。
您可以通过 UnityFramework
Objective-C 类的实例来控制 Unity 运行时,它是 UnityFramework.framework
的主要类。
方法 | 描述 |
---|---|
+ (UnityFramework*)getInstance; |
返回 UnityFramework 实例的单例类方法。 |
- (UnityAppController*)appController; |
返回 UIApplicationDelegate 的 UnityAppController 子类。这是原生端上的根 Unity 类,可以访问应用程序的与视图相关的对象,例如 UIView 、UIViewControllers 、CADisplayLink 或 DisplayConnection 。 |
- (void)setDataBundleId:(const char*)bundleId; |
设置 Unity 运行时应在其中查找 Data 文件夹的 Bundle。有关更多信息,请参阅有关 Data 文件夹 的文档。在调用 runUIApplicationMainWithArgc 或 runEmbeddedWithArgc 之前调用此方法。 |
- (void)runUIApplicationMainWithArgc:(int)argc argv:(char*[])argv; |
在没有其他视图的主方法中运行 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; |
为了使 CrashReporter 正确工作,您必须在运行 Unity 之前调用此方法。 |
- (void)sendMessageToGOWithName:(const char*)goName functionName:(const char*)name message:(const char*)msg; |
此方法是 UnitySendMessage 的代理。它按名称查找游戏对象并使用单个字符串消息参数调用 functionName。 |
(void)quitApplication:(int)exitCode; |
调用此方法以完全卸载 Unity,并在 Unity 退出时接收对 UnityFrameworkListener 的回调。Unity 将释放所有内存。注意:在此调用后,您将无法在同一进程中再次运行 Unity。您可以将 AppController 上的 quitHandler 设置为覆盖默认的进程终止。 |
Unity 不控制运行时生命周期,因此 Unity 作为库可能不适用于所有可能的用例。已知的限制包括
UIStatusBarHidden
或 UIViewControllerBasedStatusBarAppearance
密钥。prefersStatusBarHidden
并调用 setNeedsStatusBarAppearanceUpdate
方法。childViewControllerForStatusBarHidden
。