在 Unity 中获取被跟踪设备的 SteamVR 设备信息

Get SteamVR device information for tracked devices in Unity

尊敬的 SteamVR 和 Unity 社区,

我现在已经搜索了很多如何在 Unity 中接收有关被跟踪设备的信息,但似乎没有足够的文档记录或者除了设备类型等一些例外情况外根本不可能。

我正在使用 SteamVR 2.6.1 和 Unity 2019.4.8,我想获取我跟踪的设备的名称,或者如果它是 Lighthouse,我想获取 Lighthouse 所在的频道正在工作。

是否有机会通过 API 获得例如 SteamVR 系统报告生成的所有信息?

最佳。

至少我找到了一个解决方案来获取唯一的设备 ID,该 ID 可用于识别灯塔:

var id = new System.Text.StringBuilder(64);
OpenVR.System.GetStringTrackedDeviceProperty((uint)i, ETrackedDeviceProperty.Prop_RenderModelName_String, id, 64, ref error);
Debug.Log(id);

其中i是被追踪设备的编号。

SteamVR 在 SteamVR_RenderModel 中有一个函数 UpdateModel(),它可以确定控制器并更新游戏中的模型。我复制修改如下:

        public string GetDeviceProperty(int index)
        {
            var system = OpenVR.System;
            if (system == null || index < 0) {
                return null;
            }

            var error = ETrackedPropertyError.TrackedProp_Success;
            uint capacity = system.GetStringTrackedDeviceProperty((uint) index, ETrackedDeviceProperty.Prop_RenderModelName_String, null, 0, ref error);
            if (capacity <= 1) {
                _logger.Verbose("Failed to get render model name for tracked object {index}", index);
                return null;
            }

            var buffer = new System.Text.StringBuilder((int) capacity);
            system.GetStringTrackedDeviceProperty((uint) index, ETrackedDeviceProperty.Prop_RenderModelName_String, buffer, capacity, ref error);

            return buffer.ToString();
        }

这是给定索引的 returns 字符串。