2017-08-21 5 views
5

セッションの中断後にARWorldTrackingセッションの北向きを変更しようとしています。私はdocumentationを何度か訪れたが、私はそれが混乱していると思っている。ARKit:中断後にワールド方向をリセットする方法

現在の行動:私は、デバイスをロックし、sessionWasInterruptedをトリガー、アプリを再度開くと

は、SCNNodesすべては〜90度ほどでコンパスに反時計回りにシフトします。

あなたが実行(_呼び出す場合:オプション:)セッションの現在の設定よりも 異なるタイプの構造を持つメソッドを、セッション はいつも私がいることを言うようにということを解釈

を追跡リセット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]) 
} 

望ましい行動:アプリがセッションの中断を検出したとき、私はそれが戻って真北に自分自身を再配向するために

たいと思います。

答えて

0

この問題は私を殺していました。ソリューションの半分を手伝ってくれました。「トラッキングをリセットする/既存のアンカーを削除する」フラグを追加することは私の魔法の鍵でした。私はもう半分がThis postセッションを一時停止し、シーンからすべてのノードを削除してから、再度配置する必要があります。これらの両方の組み合わせは、私のためにセッションが中断された後、真北にリセットされるコンパスを得ました。

func resetARSession() { 
    // Called by sessionInterruptionDidEnd 

    sceneView.session.pause() 
    sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in 
     node.removeFromParentNode() } 
    setupARSession() 
    setupSceneView() 
} 

func setupARSession() { 

    let configuration = ARWorldTrackingConfiguration() 
    configuration.worldAlignment = .gravityAndHeading 
    sceneView.session.run(configuration, options: [ARSession.RunOptions.resetTracking, ARSession.RunOptions.removeExistingAnchors]) 

} 
関連する問題