Как определить местоположение базовых станций 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 чтобы базовые станции появлялись в вашей сцене.

Другие вопросы по тегам