我现在有以下设置:
- 初始化所有管理器(空间映射、光标、相机等(的"启动"场景
- 带有动画和一个四处移动的物体的"主"场景
一旦用户与程序交互,场景就会在某个时候重新启动,然后应该发生以下情况:
- 对象的坐标被存储(例如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 编辑器中,定位点不起作用!因此,只需复制粘贴坐标,就像我在最初的帖子中所做的那样。