Version: 2023.2
XR API reference
创建 XR 提供程序

Unity XR SDK

The Unity XR SDK is aimed at specialist users who want to develop their own XR providers that work with Unity. To download XR SDK, you must sign up for access on this page.

在 Unity 中,XR SDK 包允许多个后端(称为“提供程序”)来实现单个引擎功能(称为“子系统”)。用户应用程序可以在运行时选择和激活提供程序。

子系统

单个子系统包含:

  • 面向开发者的 C# 接口
  • 多个后端(提供程序)通过动态库实现的原生接口
  • 通用引擎代码,用于处理与 C# 接口、原生接口和引擎其余部分的通信

子系统图

子系统描述符

子系统描述符是关于子系统的元数据,可以在加载或初始化子系统之前对其进行检查。这来自清单文件并通过 C# 接口访问。Create 方法激活子系统并将它的一个实例提供给用户的脚本。

For more information, see the Runtime discovery and activation of subsystems page.

子系统实例

当在子系统描述符上调用 Create 时,会创建一个子系统实例。脚本代码与这些实例交互以与子系统通信。子系统本身有自己的生命周期:它可以启动、停止和关闭。

提供程序

提供程序是子系统的原生实现。一个子系统可以有多个提供程序。某些子系统可以允许多个提供程序同时处于活动状态,但另一些子系统可能是互斥的。

提供程序图
提供程序图

提供程序符合 Unity 原生插件接口,在此基础上构建了一些额外的生命周期支持。入口点是 UnityPluginLoad 方法。从那里,提供程序必须向它要实现的所有子系统注册。

extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
UnityPluginLoad(IUnityInterfaces* unityInterfaces)
{
    s_XrDisplay = unityInterfaces->Get<IUnityXRDisplayInterface>();
    UnityLifecycleProvider displayLifecycleHandler =
    {
        NULL, // 这可以是要以 userData 形式传递给以下函数的任何对象
        &Lifecycle_Initialize,
        &Lifecycle_Start,
        &Lifecycle_Stop,
        &Lifecycle_Shutdown
    };
    s_XrDisplay->RegisterLifecycleProvider("Provider Plugin Name", "Display0", &displayLifecycleHandler);

    // 注册其他子系统
}
XR API reference
创建 XR 提供程序