1

亲爱的 SteamVR 和 Unity 社区,

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

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

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

最好的。

4

2 回答 2

1

至少我找到了一个解决方案来获取唯一的设备 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是被跟踪设备的编号。

于 2020-09-24T13:42:18.943 回答
0

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

        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();
        }

这将返回给定索引的字符串。

于 2021-11-07T08:02:27.170 回答