【问题标题】:How can I get the spatial mesh collider in unity correctly?如何正确获得统一的空间网格对撞机?
【发布时间】:2021-12-29 05:20:19
【问题描述】:

我正在尝试获取从 MS Hololens 获得的空间网格上的最近点。 我可以通过这个参考轻松获得 SpatialAwarenessMeshObject 碰撞器和游戏对象 (https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/features/spatial-awareness/usage-guide?view=mrtkunity-2021-01)

它正在运行,但不是我所期望的。计算的最近点不正确。 我做对了吗? 请告诉我 OnObservationAdded 和 OnObservationUpdated 方法之间的区别。

enter image description here LineManager.cs 脚本:我想在空间网格上从某个点到最近点画一条线。该脚本尝试获取 SpatialAwarenessMeshObject 的 Collider 并找到其上最近的点。

enter image description here MeshManager.cs :这个脚本实现了来自 SpatialAwarenessHandler 的虚拟方法。我真的不知道每个虚拟方法是什么意思。

谢谢。

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: unity3d hololens mrtk mesh-collider


【解决方案1】:

尝试为距离属性渲染一条线非常昂贵。我们可以尝试以下步骤来完成此任务:首先,使用Camera.mainCamera.gameObject.transform.position 获取主摄像机的位置,使用Mesh.vertices 获取网格的顶点位置。然后,使用Mesh.Transform.TransformPoint 将顶点位置从局部空间转换到世界空间。最后调用Vector3.Distance获取它们之间的距离。

请告诉我 OnObservationAdded 和 OnObservationUpdated 方法之间的区别。

OnObservationAdded 会在观察者创建网格时引发,OnObservationUpdated 会在网格更新时引发。请查看此源代码以了解其工作原理: BaseSpatialMeshObserver

【讨论】:

  • 非常感谢您让我了解 SpatialAwarenesshandler 的虚拟方法。但我真正想知道的是“我怎样才能得到正确的空间网格对撞机”,而不是到网格顶点的距离。一旦我获得了正确的空间网格对撞机,我将使用“Physics.ClosestPoint()”方法获得最近的点。如果我提供的信息不容易理解并使您感到困惑,对不起。这是我的第一个问题。谢谢你的回答。
  • 获取对撞机空间网格,只需使用meshObject.Collider。但是,从您的代码中,您在循环中重复地将不同的字典值分配给同一个变量,这导致部分数据丢失。
猜你喜欢
  • 1970-01-01
  • 2019-06-21
  • 2023-02-26
  • 2021-12-18
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 2022-12-17
相关资源
最近更新 更多