将对象放置在预先扫描的房间中的设定位置

时间:2017-10-26 09:42:30

标签: c# unity3d hololens

目标: 我有一个预先扫描的房间空间地图。 (通过入职流程进行。)

我们在预定义的静态位置拍摄该地图并在Unity中添加全息位置/标记/数字双胞胎。例如墙壁空间,配件等

然后启动应用程序并将所有全息数据包含在正确的位置,而不管用户的物理起始位置如何。

简而言之,我想要一个应用程序启动,在现实世界的设定位置预定义全息图,无论应用程序在该房间内的哪个位置启动。

我已经阅读了很多关于空间映射,空间理解等的教程和演练等,但它们似乎并没有解决我的问题。

我已经使用hololens网页浏览器界面下载了房间的3D空间地图,并使用Unity放置了全息图,以及各自的脚本等。

现在,当我启动应用程序时,所有全息图相对于彼此都是正确创建的,但是如果我启动应用程序站在设定点,朝着设定的方向查看,它们只在正确的位置。

主要的想法是找到房间的空间锚点(我不知道从创建的空间地图中得到这些空间!)然后一旦找到它们,旋转/翻译全息世界匹配实时扫描的空间锚点。

其他方法包括: - 在应用程序的首次运行的某些配置中手动放置所有对象 - 创建qr代码并将它们放置在设置位置,以与上述主要思想中的空间锚点相同的方式起作用。

有没有人这样做,并且有更好的方法在每个应用运行的真实世界位置产生预定义的全息图吗?

其他问题寻找类似的答案,但没有解决我的用例: https://forums.hololens.com/discussion/2938/position-independent-object-placement https://forum.unity.com/threads/how-do-i-refer-to-a-specific-space-in-a-spatial-mapped-room.425525/

2 个答案:

答案 0 :(得分:2)

您需要设置世界锚点,让Hololens记住扫描空间中全息图的位置。 (More info

我试过了,效果很好。

答案 1 :(得分:1)

  
      
  • 手动将所有对象放在应用程序首次运行的某个配置中
  •   

这是您可以采取的最简单的行动方案。基本上我会在您要锚定的所有全息图上添加TapToPlace脚本。当您第一次启动应用程序时,它们将位于Unity中您拥有它们的任何位置。但是,一旦您关闭应用程序并将其打开,它将与您放置它们的位置相同。如果您不希望用户能够如此轻松地移动它们,我会添加某种类型的方法,通过按钮单击或语音命令禁用TapToPlace

您可以在MRTK中找到TapToPlace脚本。这是一种非常简单的方法,因为您不必了解附加和删除世界锚,因为它已经为您完成了。