Unity3d:子系统的运行时发现和激活

推荐:将NSDT场景编辑器加你的3D工具链
3D工具集:NSDT简石数字孪生

子系统的运行时发现和激活

将以下脚本添加到您的项目中,以扫描并创建或启动 idDisplay0 的显示子系统。如果要加载其他显示子系统,可以更改 match 变量:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.XR;
using UnityEngine.XR;

public class Display : MonoBehaviour
{
    public string match = "Display0";

    // Use this for initialization
    void Start ()
    {
        List<XRDisplaySubsystemDescriptor> displays = new List<XRDisplaySubsystemDescriptor>();
        SubsystemManager.GetSubsystemDescriptors(displays);
        Debug.Log("Number of display providers found: " + displays.Count);

        foreach (var d in displays)
        {
            Debug.Log("Scanning display id: " + d.id);

            if (d.id.Contains(match))
            {
                Debug.Log("Creating display " + d.id);
                XRDisplaySubsystem dispInst = d.Create();

                if (dispInst != null)
                {
                    Debug.Log("Starting display " + d.id);
                    dispInst.Start();
                }
            }
        }
    }
}

XR 管理包是面向用户的 UI,用于在运行时配置子系统的加载。它使用相同的底层 API(如上所述)来创建和管理子系统。如果希望提供程序显示在 XR 设置 UI 中,请编写 XRLoader。

如果您的插件加载失败,请参阅下方的故障排除部分。

运行时插件发现故障排除

要对子系统提供程序的初始化或启动进行故障排除,请在编辑器日志或播放器输出日志中查找以 [XR][Subsystems] 开头的行。

在 C# 中找不到子系统

如果您刚刚添加了 .json 和插件文件,请确保重新启动 Unity。目前,Unity 仅在启动时发现这些文件。此外,请确保提供程序使用正确的文件布局。

UnitySubsystemsManifest.json 文件的错误查找和解析

错误描述
[XR] 3 ‘displays’ descriptors matched in Assets/UnityXRDisplayExample/UnitySubsystemsManifest.jsonUnity 成功找到了显示描述符并为此插件注册了三个不同的 ID。
[XR] No descriptors matched for inputs in Assets/UnityXRDisplayExample/UnitySubsystemsManifest.json..json 文件不包含输入描述符。如果您没有实现输入子系统,这是正常的。
如果您希望 Unity 在 .json 文件中查找描述符,则描述符可能格式不正确。请参阅 UnitySubsystemsManifest.json 上的文档,了解要使用的正确格式。
[XR] Failed to parse json header for Assets/UnityXRDisplayExample/UnitySubsystemsManifest.json (did you forget to include name or libraryName fields?)这可能意味着您的 .json 文件格式不正确。通过验证工具(如json linter)运行该文件。

查找和加载提供程序插件时出错

错误描述
[XR] PluginName failed to register Provider for DisplayId (json name or id doesn’t match?)这意味着 RegisterLifecycleProvider 的前两个参数与 .json 文件不匹配。
第一个参数 pluginName 应该与 .json 文件中的 name 字段匹配。
第二个参数 id 应该与 .json 文件中子系统的 id 字段匹配。
[XR] Unable to load plugin PluginName for subsystem DisplayId找不到您的插件,它是为错误的架构构建的,或者缺少需要加载的依赖项。在后一种情况下,您可以使用 Dependency Walker 工具来确定是否缺少依赖项。

初始化提供程序时出错

错误描述
[XR] Failed to initialize subsystem DisplayId [error: 1]Unity 调用了您的 Initialize 方法,但它返回了 kUnitySubsystemErrorCodeFailure。仔细检查您的 Initialize 方法的实现。

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3d:UnitySubsystemsManifest (mvrlink.com)

下一篇:Unity3d:XR SDK 输入子系统 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号