一个 XR一个涵盖虚拟现实 (VR)、增强现实 (AR) 和混合现实 (MR) 应用的总称。支持这些交互式应用程序的设备可以称为 XR 设备。更多信息
参见 术语表 提供程序是 Unity 项目的一部分,至少包含一个清单文件和一个或多个原生 插件在 Unity 之外创建的一组代码,用于在 Unity 中创建功能。Unity 中可以使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和原生插件(平台特定的原生代码库)。更多信息
参见 术语表。它还可以包含其他资源,例如 脚本一段代码,允许您创建自己的组件、触发游戏事件、随着时间推移修改组件属性以及以任何您喜欢的方式响应用户输入。更多信息
参见 术语表 和图像。只要这些文件在您启动编辑器时位于您的项目中,Unity 就会发现它们。
注意:更改提供程序的清单或编辑器 原生插件一个平台特定的原生代码库,在 Unity 之外创建,用于在 Unity 中使用。允许您访问诸如操作系统调用和第三方代码库等功能,否则这些功能将无法用于 Unity。更多信息
参见 术语表 时,您必须重新启动 Unity。
原生插件必须位于相对于清单文件 UnitySubsystemsManifest.json
的子文件夹中,并且不得超过清单本身以下两个文件夹。
此清单包含有关提供程序的信息,包括它提供的子系统和插件名称。需要注意的是,任何在 UnitySubsystemsManifest.json
中定义子系统并需要这些子系统在 Unity 编辑器中运行的包的 package.json
文件都应包含 xreditorsubsystem
关键字。此关键字的存在对于确保 Unity 编辑器识别并正确发现这些子系统至关重要。如果没有此关键字,用于编辑器用途的子系统可能无法按预期执行,但这不会影响播放器构建过程。
有关更多信息,请参阅 UnitySubsystemsManifest.json 页面。
要了解如何为目标平台构建原生插件,请参阅有关 Unity 原生插件接口 的文档。将动态库导入 Unity 后,请确保所有选项(例如 插件设置 中的目标平台)都正确。
您需要为打算实现的子系统注册一个生命周期处理程序。例如
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
UnityPluginLoad(IUnityInterfaces* unityInterfaces)
{
s_XrDisplay = unityInterfaces->Get<IUnityXRDisplayInterface>();
UnityLifecycleProvider displayLifecycleHandler =
{
NULL, // This can be any object you want to pass as userData to the following functions
&Lifecycle_Initialize,
&Lifecycle_Start,
&Lifecycle_Stop,
&Lifecycle_Shutdown
};
s_XrDisplay->RegisterLifecycleProvider("Provider Plugin Name", "Display0", &displayLifecycleHandler);
// Register with other subsystems
}
注意:传递给 RegisterLifecycleProvider
的参数必须与 清单文件 中的 name
和 id
字段匹配。
稍后调用 Initialize
方法时,您将获得一个实例句柄,可用于调用采用 UnitySubsystemHandle
的方法。示例
/// Callback executed when a subsystem should initialize in preparation for becoming active.
static UnitySubsystemErrorCode UNITY_INTERFACE_API Lifecycle_Initialize(UnitySubsystemHandle handle, void* data)
{
// Register for callbacks on the graphics thread.
UnityXRDisplayGraphicsThreadProvider gfxThreadProvider = { NULL, NULL, &GfxThread_WaitForNextFrameDesc, NULL };
s_XrDisplay->RegisterProviderForGraphicsThread(handle, &gfxThreadProvider);
return kUnitySubsystemErrorCodeSuccess;
}
SDK 包包含一个构建示例插件的示例项目。
有关在 Unity 中加载提供程序的更多信息,请参阅 子系统的运行时发现和激活 页面。