Как определить местоположение базовых станций Vive?
Так что я совершенно новичок в Unity и VR, но для проекта мне нужно определить положение базовых станций.
Я попробовал поискать в Google, но так как я не знаю всего языка, я не знаю, где и что искать.
Все, что я могу найти, это как обнаружить контроллеры.
2 ответа
Вот один из способов, все с кодом 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. Стандартный плагин SteamVR для Unity уже имеет способ определить местоположение любого отслеживаемого устройства, например, посмотрите, как контроллеры реализованы в стандарте. [CameraRig]
сборный дом
Единственная проблема заключается в том, что вам необходимо предоставить "индекс" устройства, который может меняться при каждом повторном подключении гарнитуры. Плагин SteamVR обрабатывает это с SteamVR_ControllerManager
компонент, но как следует из названия - он обрабатывает только контроллеры. Вы должны иметь возможность реализовать нечто подобное или просто отредактировать скрипт и найти строки
if (deviceClass == ETrackedDeviceClass.Controller ||
deviceClass == ETrackedDeviceClass.GenericTracker)
и добавить ETrackedDeviceClass.TrackingReference
к этому списку. После этого вы сможете скопировать объекты контроллера и прикрепить их в массив "дополнительные объекты" в SteamVR_ControllerManager
чтобы базовые станции появлялись в вашей сцене.