亲爱的 SteamVR 和 Unity 社区,
我现在已经搜索了很多如何在 Unity 中接收有关被跟踪设备的信息,但似乎没有足够的文档记录或者只是不可能,除了设备类型等一些例外情况。
我正在使用 SteamVR 2.6.1 和 Unity 2019.4.8,我想获取我跟踪的设备的名称,或者如果它是灯塔,我想获取灯塔工作的频道。
例如,是否有机会通过 API 获得 SteamVR 系统报告生成的所有信息?
最好的。
至少我找到了一个解决方案来获取唯一的设备 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 中有一个函数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();
}
这将返回给定索引的字符串。