【问题标题】:Unity instantiate object at a certain direction based of a spatial anchorUnity根据空间锚​​在某个方向实例化对象
【发布时间】:2023-02-01 12:36:52
【问题描述】:

以空间锚点作为参考点,我想创建一个对象,该对象不会更改其引用空间锚点的位置。

创建和保存稍后使用预制件生成的对象的初始位置时。我利用空间锚点和对象之间的 x、y、z 坐标的差异并将其保存在云端。之后,利用x,y,z 的差异将预制件加载回其原始位置。

在基于空间锚点创建对象时

但是,在不同点重新启动应用程序后,预制件将根据全息透镜的启动位置进行移动。据我所知,全息透镜启动时的初始位置为 (0,0,0)。因此,空间锚坐标将不同,并导致预制件在不同方向加载。

在不同位置启动应用程序时

有什么方法或解决方案可以让我在创建预制件的同一位置加载预制件,而不受全息镜头位置的影响?

【问题讨论】:

  • However, upon restarting the application at a different point, the prefab will be shifted based on the start up position of the hololens 听起来好像空间锚不工作/没有使用...... HoloLens 映射你的周围环境并尝试将空间锚保持在相同的现实世界位置,只要它识别环境为相同的“房间”=> 走动多一点以确保它将您的周围环境识别为一个连贯的房间
  • 空间锚保留在其原始位置。只是在不同位置启动应用程序时,坐标会根据用户位置相应地改变。例如,当我创建空间锚点时,坐标为 (1,1,1),但当我移动 1m 并重新启动应用程序时。我生成空间锚点,位置仍然保持不变,只是坐标可能变为 (2,2,2)。从而影响预制件的生成。
  • 是的,但这不正是你所期望的..你使用空间锚点的原因是因为你想将你生成的对象锚定到真实世界的位置 - >当然它会在你的虚拟Unity坐标中的其他地方如果您移动是因为目标并未将其保持在相同的 Unity 坐标中,而是将其保持在相同的真实世界位置
  • 明白了。只是好奇是否有任何解决方法可以在不使用空间锚点的情况下将预制件重新生成到其原始位置。我试图保存空间锚点和预制件之间的角度。之后,用它的 x,y,z 实例化预制件,然后相应地向后旋转角度。但是,没有设法解决,不确定我是否将其编码错误或者我的逻辑/概念是否错误。
  • 我认为这仍然是一个逻辑问题 tbh ... 你要么希望将对象保持在固定在你房间的相同现实世界位置 -> 你使用空间锚点 .. 就是这样。或者您希望对象处于相同的 Unity 坐标 -> 您根本不使用空间锚 ...

标签: unity3d hololens mrtk azure-spatial-anchors prefab


【解决方案1】:

如果你的预制件是锚点的孩子,你可以做这样的事情来保存相对于锚点的位置:

var localPos = spawned.transform.localPosition;
var localRot = spawned.transform.localEulerAngles;
var localSca = spawned.transform.localScale;
        
var prefab = new Prefab
{
   AnchorId = anchorId,
   PosX = localPos.x,
   PosY = localPos.y,
   PosZ = localPos.z,
   RotX = localRot.x,
   RotY = localRot.y,
   RotZ = localRot.z,
   ScaX = localSca.x,
   ScaY = localSca.y,
   ScaZ = localSca.z
};

将预制件保存到云端。

然后,当您开始一个新会话并找到锚点时,您将生成预制件作为锚点的子项,并根据您之前存储的数据设置转换:

spawned.transform.localPosition = new Vector3(prefab.PosX, prefab.PosY, prefab.PosZ);
spawned.transform.localRotation = Quaternion.Euler(prefab.RotX, prefab.RotY, prefab.RotZ);
spawned.transform.localScale = new Vector3(prefab.ScaX, prefab.ScaY, prefab.ScaZ);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2023-04-04
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多