所以我对 Unity 和 VR 完全陌生,但对于一个项目,我需要检测基站的位置。
我试过用谷歌搜索,但由于我不知道所有的术语,我真的不知道在哪里寻找什么。
我能找到的只是如何检测控制器。
所以我对 Unity 和 VR 完全陌生,但对于一个项目,我需要检测基站的位置。
我试过用谷歌搜索,但由于我不知道所有的术语,我真的不知道在哪里寻找什么。
我能找到的只是如何检测控制器。
这是一种方法,全部使用 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);
}
在 OpenVR 中,基站是“被跟踪的设备”,就像控制器和 HMD 一样。Unity 的标准 SteamVR 插件已经有一种方法可以获取任何被跟踪设备的位置,例如,请参阅控制器是如何在标准[CameraRig]
预制件中实现的。
唯一的问题是您需要提供设备的“索引”,每次重新连接耳机时,该索引可能会发生变化。SteamVR 插件使用组件处理这个问题SteamVR_ControllerManager
,但顾名思义 - 它只处理控制器。您应该能够实现类似的东西,或者只是编辑脚本并找到行
if (deviceClass == ETrackedDeviceClass.Controller ||
deviceClass == ETrackedDeviceClass.GenericTracker)
并添加ETrackedDeviceClass.TrackingReference
到此列表中。然后,您应该能够复制控制器对象并将它们附加到“附加对象”数组中,SteamVR_ControllerManager
以使基站出现在您的场景中。