2

所以我对 Unity 和 VR 完全陌生,但对于一个项目,我需要检测基站的位置。

我试过用谷歌搜索,但由于我不知道所有的术语,我真的不知道在哪里寻找什么。

我能找到的只是如何检测控制器。

4

2 回答 2

1

这是一种方法,全部使用 Unity 代码:

var nodeStates = new List<XRNodeState>();
InputTracking.GetNodeStates(nodeStates);

foreach (var trackedNode in nodeStates.Where(n => n.nodeType == XRNode.TrackingReference))
{
    bool hasPos = trackedNode.TryGetPosition(out var position);
    bool hasRot = trackedNode.TryGetRotation(out var rotation);

}
于 2018-10-02T15:42:07.673 回答
0

在 OpenVR 中,基站是“被跟踪的设备”,就像控制器和 HMD 一样。Unity 的标准 SteamVR 插件已经有一种方法可以获取任何被跟踪设备的位置,例如,请参阅控制器是如何在标准[CameraRig]预制件中实现的。

唯一的问题是您需要提供设备的“索引”,每次重新连接耳机时,该索引可能会发生变化。SteamVR 插件使用组件处理这个问题SteamVR_ControllerManager,但顾名思义 - 它只处理控制器。您应该能够实现类似的东西,或者只是编辑脚本并找到行

if (deviceClass == ETrackedDeviceClass.Controller ||
    deviceClass == ETrackedDeviceClass.GenericTracker)

并添加ETrackedDeviceClass.TrackingReference到此列表中。然后,您应该能够复制控制器对象并将它们附加到“附加对象”数组中,SteamVR_ControllerManager以使基站出现在您的场景中。

于 2018-08-16T20:54:38.397 回答