我正尝试在 ARWorldTracking 会话中,在会话发生中断后重新定位北方。我已经多次查看了文档,但是发现它很难理解。
当前行为:
当我锁定设备并重新打开应用程序时,会触发sessionWasInterrupted
,此时所有的 SCNNodes 在指南针上都逆时针移动了大约90度左右。
当您使用与会话当前配置不同的配置调用 run(_:options:) 方法时,会话总是重置跟踪
我理解这是说如果我生成了一个与 viewWillAppear
不同的新配置集,会话将会“重置”。但实际发生的事情我还没有弄清楚,中断后的定位出现了偏差。(并且 removeExistingAnchors
没有起到任何作用)
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let configuration = ARWorldTrackingSessionConfiguration()
configuration.planeDetection = .horizontal
configuration.worldAlignment = .gravityAndHeading
sceneView.session.run(configuration)
}
func sessionWasInterrupted(_ session: ARSession) {
let configuration = ARWorldTrackingSessionConfiguration()
configuration.planeDetection = .horizontal
configuration.worldAlignment = .gravityAndHeading
self.sceneView.session.run(configuration, options: [ARSession.RunOptions.removeExistingAnchors, ARSession.RunOptions.resetTracking])
}
期望的行为:
当应用程序检测到会话中断时,希望它能重新定位回真正的北方。