2017-08-21 50 views
5

ARWorldTracking oturumunu oturuma ara verdikten sonra yeniden yönlendirmeye çalışıyorum. Birkaç kez documentation'u aştım ama kafa karıştırıcı buluyorum.ARKit: Kesintiden sonra dünya yönlendirmesi nasıl sıfırlanır?

Güncel Davranış:

ben cihazı kilitlemek ve sessionWasInterrupted tetikleyerek Uygulamayı yeniden, SCNNodes bütün ~ tarafından pusula üzerinde saat yönünün tersine 90 derece ya da öylesine kayması.

Eğer koşmak (_ aradığında: oturumun geçerli yapılandırma daha farklı türde bir yapılandırma ile seçenekleri :) yöntemi, oturumu hep şeklindeki sözleri olduğunu yorumlanır

izleme sıfırlar viewWillAppear'dan farklı yeni bir yapılandırma kümesi oluşturduğumda, oturum "sıfırlanır". Aslında olanı almıyorum ama kesintiden sonra yönelim kapalı.

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]) 
} 

İstenilen Davranış (ve removeExistingAnchors hiçbir şey yapmaz): uygulaması bir seans kesinti algılar

, bunu yeniden yönlendirmek için kendisini geri gerçek kuzey istiyorum.

cevap

0

Bu sorun beni de öldürüyordu - bana yardıma çözüm sağladım - 'Sıfırlama takibi/Var olan çapaları kaldır' bayraklarını eklemek benim için sihirli bir anahtardı - diğer yarının da This post rehberliği olduğunu düşünüyorum. Seansınızı duraklatmanız ve tüm düğümleri sahneden çıkarmanız, ardından yeniden konumlandırmanız gerekir. Bu şeylerin her ikisinin kombinasyonu, pusulanın benim için oturumun kesilmesinden sonra True North'a geri dönmesini sağladı.

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]) 

}