在全息场景中重新启动后应用坐标



我现在有以下设置:

  • 初始化所有管理器(空间映射、光标、相机等(的"启动"场景
  • 带有动画和一个四处移动的物体的"主"场景

一旦用户与程序交互,场景就会在某个时候重新启动,然后应该发生以下情况:

  • 对象的坐标被存储(例如DontDestroyOnLoad((在"存储对象"上。我需要销毁对象,因为它需要在场景重启时自行重置(
  • 场景重启
  • 使用存储的坐标重新创建对象

法典:

DataPositionStorer positionStorer = new GameObject("DataPositionStorer").AddComponent<DataPositionStorer>();
DontDestroyOnLoad(positionStorer.gameObject);
// dataPoints is the specific object I need to keep the coordinates of
positionStorer.Position = dataPoints.transform.position;
positionStorer.Rotation = dataPoints.transform.rotation;
positionStorer.Zoom = dataPoints.transform.localScale;
// Reload current scene ("Main")
SceneManager.LoadScene(SceneManager.GetActiveScene().name);

在对象的启动方法中:

DataPositionStorer positionStorer = FindObjectOfType<DataPositionStorer>();
if (positionStorer!= null)
{
    dataPoints.transform.position = positionStorer.Position;
    dataPoints.transform.localRotation = positionStorer.Rotation;
    dataPoints.transform.localScale = positionStorer.Zoom;
}

此设置在 Unity 播放器中有效,但是一旦我在 hololens 模拟器/全息镜头上运行它,之后的位置就不再正确了。

有人可以帮助我在模拟器/全息器上解决此问题吗?

感谢这两个人的评论,我找到了解决方案:

  • 在设置场景中加载 WorldAnchorManager 脚本并使其不破坏加载
  • 在场景重新启动之前附加世界定位点
  • 场景重启后加载世界定位点

但是,这仅适用于模拟器/HoloLens本身。在 Unity 编辑器中,定位点不起作用!因此,只需复制粘贴坐标,就像我在最初的帖子中所做的那样。

最新更新