如何让 Hololens 全息图锚定在物理环境中?
Posted
技术标签:
【中文标题】如何让 Hololens 全息图锚定在物理环境中?【英文标题】:How to keep Hololens holograms anchored in physical environment? 【发布时间】:2021-01-28 09:27:50 【问题描述】:如here 所述,关于此主题的文档似乎非常有限。我知道我需要一个“世界锚”。我在查找有关如何使用此类锚点的任何文档时遇到问题。 This is the closest documentation 我可以从 Microsoft 找到,但遗漏了很多细节并且没有任何工作示例。 The documentation from Unity 也好不了多少,虽然它专门针对 WorldAnchor
。
我首先通过 Unity 编辑器,通过“添加组件”>“AR”>“世界锚”向游戏对象添加一个组件。这似乎没有任何作用。
然后我从this YouTube video 中找到了this demo code,并开始实现它(这比我需要的要复杂得多)。
我终于从this discussion 中得知有一个WorldAnchorManager
,并尝试通过下面的代码使用它。这也没有效果:
using Microsoft.MixedReality.Toolkit.Experimental.Utilities;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.WSA;
using UnityEngine.XR.WSA.Persistence;
public class HololensWorldAnchorManager : MonoBehaviour
private WorldAnchorManager Manager;
// Start is called before the first frame update
void Start()
// Load and get a reference to the store.
this.AttachAnchor();
private void AttachAnchor()
this.Manager = new WorldAnchorManager();
this.Manager.AttachAnchor(this.gameObject);
// more class stuff...
在关注directions here(已过时且不再工作)之后,我终于想出了如何让我的项目不在 Hololens 上的窗口中......但现在没有锚工作了,我明白了我的全息图就好像它粘在我的脸上一样(即使在发布版本中我也看到帧率条 - 我也不想要那个)。
我错过了什么吗?您如何实际使用世界锚?我只想让我的单个全息图留在物理空间中,并且永远不动。理想情况下,此位置在运行前设置一次并且永远不会更改。作为备份,用户将全息图放置一次然后将其留在那里是可以接受的。我什至不需要持久性,也不需要多个用户来查看它,也不需要多个锚点......
更新: 我在场景中添加了第二个对象,并验证了在打开 Hololens 的情况下移动实际上根本不会在场景中导航。锚点可能工作正常,但我无法验证这一点,因为整个场景都随着用户移动。
然后,我还尝试将 Unity 场景输出到与问题场景相同的 Hololens,但未在其上设置 MRTK。这导致与 Hololens 场景完全相同的结果。也许我错过了设置或构建配置步骤或其他什么? MRTK 摄像头装置在 Unity 播放器中运行良好......只有在 Hololens 上才会出现问题。
【问题讨论】:
【参考方案1】:实际上,World Anchors
组件将覆盖其父 GameObject 的 Transform
组件,并且任何对 Transform 组件的直接操作都将丢失。因此,您应该首先确定全息图在物理场景中的位置,然后在运行时添加一个锚组件以保持锁定在现实世界中的位置。更多关于 C# Script 中 Unity GameObject 的添加/删除 World Anchors 操作的详细信息,请参考此链接:Building a world-scale experience
另外,对于WorldAnchorManager
脚本,它是用来简化持久化WorldAnchor操作的使用,不能满足你的需求。
【讨论】:
我试过这个,也没有效果,和之前的解决方案一样。这让我觉得锚实际上不是问题。我的全息图粘在我的脸上——当我移动我的头时,整个场景都跟着我移动。然而,它不再在窗口中。我应该如何解决这个问题?【参考方案2】:原来问题确实出在设置上,而不是锚点(如问题更新中所述)。我必须按照 instructions here 完成代码升级,以依赖 Unity 使用的新 XR 插件系统,而不是旧系统。
我没有将Tracked Pose Driver
组件添加到相机装备(在链接方向的“迁移复杂场景”部分下),因此佩戴 Hololens 的用户不会通过头部运动和行走来驾驶相机。这就是为什么一切似乎都“被困”在同一个观点上;摄像机从未在场景中移动。
一旦解决了这个问题,锚点就可以从@Hernando - MSFT (linked again here) 提交的答案中的链接中很好地工作。
【讨论】:
以上是关于如何让 Hololens 全息图锚定在物理环境中?的主要内容,如果未能解决你的问题,请参考以下文章
微软Hololens学院教程-Hologram 230-空间映射(Spatial mapping )