Version: 2020.3
Windows
Windows 通用

将 Unity 集成到 Windows 和 UWP 应用程序中

本页说明如何使用“Unity 用作库”功能将 Unity 运行时库集成到 Windows 和通用 Windows 平台 (UWP) 应用程序中。

使用此功能可以在应用程序中包含 Unity 支持的功能(例如 3D/2D 实时渲染、AR 体验、3D 模型交互或 2D 迷你游戏)。Unity 运行时库公开了多种控件来管理何时以及如何在应用程序中加载、激活和卸载内容。

针对 UWP 的工作原理

使用 UWP XAML 项目输出类型可方便创建嵌入了 Unity 的 UWP 项目。生成的 Visual Studio 项目是常规 XAML UWP 项目,其中包含 SwapChainPanel 设置,可用于加载 Unity 项目。可以使用任何其他非 Unity 应用程序业务逻辑来扩展或替换该项目。

使用 SwapchainPanel 时,您可能需要在其他元素上渲染。这使您可以在其他非 Unity 应用程序内容上渲染具有透明背景的小对象。为此,请启用 PlayerSettings.WSA-transparentSwapchain 选项。

Unity 采用过程中加载时,可以使用 Application.Unload 来卸载 Unity 引擎以回收资源。

针对 Windows 的工作原理

在 Windows 上,可以通过两种不同方式将 Unity 嵌入到应用程序中。

最简单选项是将 Unity 作为外部进程从应用程序启动,并指定一个窗口让 Unity 在该窗口中使用 -parentHWND 命令行参数进行初始化和渲染。

第二个选项是将 Unity 嵌入现有进程中。为此,请将 Unity 构建到 UnityPlayer.dll 中,从而可由任何 Win32 应用程序直接加载。入口点签名为:

extern "C" UNITY_API int UnityMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd);

可以使用 lpCmdLine 将任何命令行参数传递给 Unity 以控制分辨率、作业线程、父级 HWND 等。这使您能够在进程内运行 Unity。Unity 不在视图中的时候,您可以使用 Application.Unload 来回收它所用的资源。

限制

由另一个应用程序托管时,Unity 不能控制运行时生命周期,因此可能无法在所有情况下都奏效。已知限制包括:

  • 您不能加载多个 Unity 运行时实例或集成多个 Unity 运行时。
  • 您可能需要调整您的原生托管插件才能正常工作。

  • 2019.3 中添加了“Unity 用作库”。NewIn20193
Windows
Windows 通用