如何确定 SteamVR_TrackedObject 是 Vive 控制器还是 Vive 追踪器
Posted
技术标签:
【中文标题】如何确定 SteamVR_TrackedObject 是 Vive 控制器还是 Vive 追踪器【英文标题】:How to determine whether a SteamVR_TrackedObject is a Vive Controller or a Vive Tracker 【发布时间】:2017-04-03 12:24:04 【问题描述】:确定SteamVR_TrackedObject
是否是 Vive 控制器和 Vive 跟踪器的最佳方法是什么?
当 0 个 Controller 和 1 个 Tacker 配对时:
Tracker 被视为Controller (right)
的CameraRig
。
当 1 个 Controller 和 1 个 Tacker 配对时:
跟踪器设置为设备 2。
当 2 个 Controller 和 1 个 Tacker 配对时:
创建第三个SteamVR_TrackedObject
并将其放入CameraRig
的objects
数组中。同样,当控制器失去跟踪时,跟踪器也会失去跟踪。
在每种情况下,Tracker 最终都是不同的SteamVR_TrackedObject.index
。检查SteamVR_TrackedObject
是否是跟踪器或找出跟踪器是哪个index
的最佳方法是什么?
【问题讨论】:
你考虑过使用triggers
吗?
@Hristo 你能扩展一下吗?我不确定你是什么意思?如果您要检查对象是否具有触发按钮,那么它将不起作用。因为跟踪器有针脚(连接一些东西作为触发器)并使用与控制器相同的协议。
天哪,对不起,我想说tags
在开始之前标记某些游戏对象?问题是每个SteamVR_TrackedObject
都被动态设置为一个设备,我无法预测它将如何分配。寻找与 SteamVR 和 OpenVR API 对话的最佳方法。
是的,您可以将不同的tags
分配给不同的GameObjects
,这样您就可以区分它们。至少从我对你的标题的理解来看。引用:“是 Vive 控制器或 Vive 跟踪器”。
【参考方案1】:
我发现的检查SteamVR_TrackedObject
的唯一方法是检查ETrackedDevicePoperty.Prop_RenderModelName_String
:
uint index = 0;
var error = ETrackedPropertyError.TrackedProp_Success;
for (uint i = 0; i < 16; i++)
var result = new System.Text.StringBuilder((int)64);
OpenVR.System.GetStringTrackedDeviceProperty(i, ETrackedDeviceProperty.Prop_RenderModelName_String, result, 64, ref error);
if (result.ToString().Contains("tracker"))
index = i;
break;
然后可以将SteamVR_TrackedObject.index
设置为索引:
GetComponent<SteamVR_TrackedObject>().index = (SteamVR_TrackedObject.EIndex)index;
到目前为止,要找到有关这方面的任何文档都相当困难,但这里有一些资料来源:
OpenVR wiki ETrackedDeviceProperty 值列表【讨论】:
爱它。另请注意,Oculus 触摸控制器名称将包含“controller_left”和“controller_right”。【参考方案2】:刚刚偶然发现这个老问题,我猜当被问到时,接受的答案是完全正确的——不过现在有一种直接的方法:你可以使用GetTrackedDeviceClass。
它将返回枚举值ETrackedDeviceClass
。可能的值是:
Invalid
- 如果此索引下没有被跟踪的设备,
HMD
- 如果设备是耳机,
Controller
- 如果设备是控制器 - 这是您的情况之一,
GenericTracker
- 这是你的另一个案例
TrackingReference
- 用于基站,支持摄像头等,
DisplayRedirect
- 文档 - “不一定会自行跟踪,但可能会重定向来自其他被跟踪设备的视频输出的附件”
Max
- 这个是无证的,我还没有偶然发现它
【讨论】:
以上是关于如何确定 SteamVR_TrackedObject 是 Vive 控制器还是 Vive 追踪器的主要内容,如果未能解决你的问题,请参考以下文章