Совместное использование HoloLens / Unity: как отслеживать положение пользователя в «мире» вместо положения Unity?

#unity3d #simulation #multiplayer #hololens #windows-mixed-reality

#unity3d #Симуляция #Многопользовательский режим #hololens #windows -смешанная реальность

Вопрос:

У меня есть AR-игра, которую я разрабатываю для HoloLens, которая включает в себя рендеринг голограмм в соответствии с относительным положением пользователей. Это многопользовательское совместное использование, в котором все в одной физической комнате подключаются к одному и тому же инстансу (общей сцене Unity), размещенному через облако или локальную сеть, и присоединившиеся игроки могут видеть голограммы, отображаемые на позициях других игроков.

Например: игрок A и B присоединяются к экземпляру, они находятся в одной комнате вместе. Игрок A может видеть голограмму над игроком B, отслеживающую положение игрока B (курсор Sims, если хотите). Затем, когда игрок A приближается к игроку B, может открыться еще пара голографических панелей, отображающих статистику игрока B. Эти панели также отслеживают положение игрока B и всегда отображаются с небольшим смещением относительно положения гарнитуры игрока B. Игрок B также видит то же самое на игроке A и наоборот.

Это в основном то, что делает моя AR-игра на данный момент.

Проблема:
Проблема, которую я пытаюсь решить, заключается в отслеживании положения пользователя абсолютно до самой комнаты вместо использования координат, которые, по словам Unity, находятся у игрового объекта игрока A и игрока B.

Мое приложение прекрасно работает, если я отмечаю физическое положение на полу и направление, в котором должны находиться все игроки при запуске приложения Unity. Это приводит к тому, что система координат во всех приложениях Unity игрока должна иметь совпадающую исходную точку и начальный курс в реальном мире. Только тогда я смогу отображать голограммы относительно положения пользователя и получать соотношение 1: 1 между пространством Unity и реальным физическим пространством вокруг гарнитуры.

Но что, если я хочу, чтобы игрок A запустил приложение на одной стороне комнаты, а игрок B запустил приложение на другой стороне комнаты? Когда я делаю это, исходная точка мира Unity игрока A находится в другом физическом месте, чем у игрока B. Тогда это приведет к тому, что голограммы будут отображать положение A или B с огромным смещением.

У меня есть несколько скриншотов, показывающих, что я имею в виду.

В этом у меня есть 3 HoloLenses. Двое на полу, плюс тот, который я ношу, чтобы делать скриншоты. На полу есть синий крестик (это лист бумаги. Я понял, что вы не видите этого на изображении.), где я запустил свое приложение Unity на всех трех HoloLenses. Таким образом, источником мира Unity для всех трех является это конкретное физическое местоположение. Как вы можете видеть, синий курсор, показывающий подключенных игроков, прекрасно отслеживает местоположение гарнитуры. Вы даже можете видеть расположение гарнитур относительно скриншота на миникарте.

Хитрость здесь, чтобы сделать отслеживание голограмм точным, заключается в том, что все три начинались в одном и том же месте. введите описание изображения здесь

Теперь в этом я ввел красный X. Я перезапустил приложение Unity на одной из гарнитур и использовал красный крест в качестве начальной точки. Как вы можете видеть на этом скриншоте, отслеживание по-прежнему точное, но оно происходит с огромным смещением. Потому что моя относительная исходная точка в Unity (синий X) отличается от относительной исходной точки других гарнитур (красный X). введите описание изображения здесь

Проблема:
Итак, это проблема, которую я пытаюсь решить. Я не хочу, чтобы всем моим пользователям приходилось инициализировать приложение в одном и том же физическом месте один за другим, чтобы голограммы отображались в правильном положении пользователя. HoloLens правильно сканирует всю комнату? Нет ли способа синхронизировать эти карты со всеми подключенными HoloLens, чтобы они могли поделиться своими абсолютными координатами? Тогда я могу использовать их в качестве точки преобразования в сцене Unity вместо отслеживания объектов многопользовательской игры
.

Вот карта на моей гарнитуре, которую я использовал, чтобы получить скриншоты от того же ангела введите описание изображения здесь

Комментарии:

1. Вам понадобится общая ссылка на реальный мир (например, отслеживание QR, Vuforia и т. Д.), А Затем использовать ее в качестве общего источника мира (-> поместите объект на трекер и создайте все, что ниже => относительно него).). Также была какая-то экспериментальная вещь для обмена ссылками на WorldAnchor относительно сетки общей комнаты … не знаю, что с этим стало ^^

Ответ №1:

Это сложно с отслеживанием наизнанку, поскольку все относительно наблюдателя (как вы обнаружили). Что вам нужно, так это иметь возможность идентифицировать общее уникальное реальное местоположение, которое ваша система затем будет рассматривать как «общее происхождение». Должно быть достаточно QR-кода или уникального объекта, который система может обнаружить и локализовать, затем отслеживайте смещение вашего пользователя (и других отслеживаемых объектов) от этого известного источника в виртуальном мире.

Комментарии:

1. Похоже, использование QR-кодов может быть жизнеспособным решением. Может быть, я мог бы использовать Vuforia и использовать маркер в качестве определяющего источника. Возможно, это может сработать. Я обеспокоен тем, что позиция, в которой игровой объект будет появляться из маркера, будет отличаться в пространстве координат игрока A и игрока B. Мне нужно будет изучить это.

2. @GhostRavenstorm вам всегда нужно будет либо пересчитывать позиции / перемещения и т. Д. Относительно преобразования трекера, Либо просто создавать все под ним 😉

Ответ №2:

Мой ответ был удален по причинам, поэтому раунд № 2. Что-то об ответах только для ссылок.

Итак, вот снова ссылка. https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/tutorials/mr-learning-sharing-05

И чтобы избежать последней ситуации, я собираюсь добавить, что тот, кто хочет синхронизированный многопользовательский опыт с HoloLens, должен прочитать всю серию обучающих программ. Я не предоставляю краткое описание того, как это сделать, без необходимости копировать и вставлять документы. Просто знайте, что вам нужен пространственный якорь, который другие загружают в свою сцену.