使用 Hololens 2 在空间映射网格上生成对象
Posted
技术标签:
【中文标题】使用 Hololens 2 在空间映射网格上生成对象【英文标题】:Spawn an object on Spatial Mapping Mesh with Hololens 2 【发布时间】:2021-02-17 10:21:05 【问题描述】:我目前正在使用 Hololens 2 进行一个项目,现在正尝试在我用手部射线瞄准的位置生成一个对象。首先,我使用 MRTK 的空间感知系统创建了一个网格,现在我想在光标位置生成一个对象。
我阅读了很多我可以处理这个问题的方法,比如 cursor.transform.position(这不起作用,可能是因为我使用了默认光标?)和实例化,组件“点击放置”,或者使用射线投射命中。不幸的是,因为这是我第一次使用 Hololens,所以我不知道哪种解决方案可能是最好的。我不认为生成东西有那么难,但也许我只是瞎了。
有没有一种简单的方法可以解决我的问题或从手部注视的光标中获取正确的坐标?
【问题讨论】:
您应该提供一些您遇到问题的具体代码,以便我们理解并帮助您 【参考方案1】:给你,使用IMixedRealityPointerHandler
。请参阅documentation。
public void OnPointerClicked(MixedRealityPointerEventData eventData)
var result = eventData.Pointer.Result;
var hitPosition = result.Details.Point;
// Check if hitting spatial mapping layer
if (result.CurrentPointerTarget?.layer == 31)
Instantiate(yourPrefab, hitPosition, yourRotation);
else
Debug.Log("Hit surface with layer: " + result.CurrentPointerTarget?.layer.ToString());
【讨论】:
我也面临同样的问题。我做了和你类似的事情。但它只适用于它所附加的游戏对象。我想在地平面上使用它。我想让它在所有对象上通用(例如附加了刚体组件的网格、平面、全息图) 那么问题出在哪里?删除 if-line 并提及图层,仅此而已。 问题是这个指针事件被附加到一个特定的游戏对象上。因此,指针事件只有在该对象处于焦点时才会起作用,因此 if-else 没有任何意义。要解决这个问题,我们可以为所有游戏对象附加相同的 OnPOinterClicked,或者我们可以在 start 方法中注册全局输入事件(在这种情况下,当它撞到地板时你的 if 将是 true)。要注册全局输入,请在 start 方法中使用CoreServices.InputSystem?.RegisterHandler<IMixedRealityPointerHandler>(this);
。以上是关于使用 Hololens 2 在空间映射网格上生成对象的主要内容,如果未能解决你的问题,请参考以下文章
Unity 和 HoloLens 中的 Prefab 低于空间映射
Hololens官方教程精简版 - 07. Spatial mapping(空间映射)