HoloLens/Unity 分享经验:如何跟踪用户的 "world" 位置而不是 Unity 的位置?

HoloLens/Unity shared experience: How to track a user's "world" position instead of Unity's position?

我这里有一款正在为 HoloLens 开发的 AR 游戏,其中涉及根据用户的相对位置渲染全息图。这是一种多人共享体验,同一物理房间中的每个人都连接到通过云或 LAN 托管的同一实例(共享 Unity 场景),加入的玩家可以看到其他玩家位置的全息图渲染。

例如:玩家A、玩家B加入一个副本,他们在同一个房间。玩家 A 可以看到玩家 B 上方的全息图跟踪玩家 B 的位置(如果您愿意,可以使用 Sims 光标)。然后,一旦玩家 A 靠近玩家 B,就会打开更多的全息面板来显示玩家 B 的统计数据。这些面板还会跟踪玩家 B 的位置,并且始终相对于玩家 B 的头显位置略微偏移进行渲染。玩家 B 在玩家 A 身上也看到同样的情况,反之亦然。

这就是我的 AR 游戏目前的基本功能。

问题:
我要解决的问题是将用户的位置绝对跟踪到房间本身,而不是使用 Unity 所说的玩家 A 的游戏对象和玩家 B 的坐标位置。

如果我在地板上标记一个物理位置和所有玩家在启动 Unity 应用程序时必须假定的面向方向,我的应用程序将运行得很好。然后,这会强制所有玩家的 Unity 应用程序中的坐标系在现实世界中具有匹配的原点和初始航向。只有这样我才能渲染相对于用户位置的全息图,并让它在 Unity space 和耳机周围的真实物理 space 之间关联 1:1。

但是如果我想让玩家 A 在房间的一侧启动应用程序并让玩家 B 在房间的另一侧启动应用程序怎么办?当我这样做时,玩家 A 的 Unity 世界的原点与玩家 B 的物理位置不同。这将导致全息图以巨大的偏移量渲染 A 的位置或 B 的位置。

我有一些屏幕截图显示了我的意思。

在这一个中,我有 3 个 HoloLenses。地板上的两个,加上我用来截屏的那个。 地板上有一个蓝色的 X(它是纸的 sheet。我意识到你在图像中看不到它。)我在所有三个 HoloLens 上启动我的 Unity 应用程序的地方。所以这三个人的 Unity 世界的起源都是那个特定的物理位置。如您所见,显示已连接玩家的蓝色光标可以很好地跟踪耳机的位置。您甚至可以在小地图上看到耳机相对于屏幕截图的位置。

这里使全息图跟踪准确的噱头是所有三个都从同一个地点开始。

现在,在这一个中,我引入了一个红色的 X。我在其中一个耳机上重新启动了 Unity 应用程序,并使用红色的 X 作为它的起点。正如您在此屏幕截图中所见,跟踪仍然是精确的,但偏移量很大。因为我在 Unity 中的相对原点(蓝色 X)与其他耳机的相对原点(红色 X)不同。

问题:
所以这就是我要解决的问题。我不希望我的所有用户都必须在同一个物理位置一个接一个地初始化应用程序,以使全息图出现在用户的正确位置。 HoloLens 会扫描整个房间吗? 有没有办法将这些地图与所有连接的 HoloLens 同步,然后它们可以共享它们的绝对坐标?然后我可以将它们用作 Unity 场景中的变换点,而不必跟踪多人游戏对象

这是我耳机上的地图,我使用的是从同一个天使那里获取屏幕截图

这对于由内而外的跟踪来说很棘手,因为一切都与观察者有关(正如您所发现的)。您需要的是能够识别一个常见的、唯一的 真实位置,然后您的系统会将其视为 'common origin'。系统可以检测和定位的 QR 码或唯一对象就足够了,然后跟踪您的用户(和其他跟踪对象)与虚拟世界中已知原点的偏移量。

我的回答因为某些原因被删除了,所以第二轮。一些关于 link 的答案。

那么,又是 link 了。 https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/tutorials/mr-learning-sharing-05

为了避免最后一种情况,我要补充一点,任何想要使用 HoloLens 进行同步多人游戏体验的人都应该通读整个教程系列。我没有提供关于如何在无需复制和粘贴文档的情况下执行此操作的摘要。只知道你需要一个其他人加载到他们场景中的空间锚点。