ARKit занимает 30 секунд, чтобы начать отслеживать?
Хорошо, исследуем ARKit со Swift в iOS 11 здесь, и я сделал очень простое приложение, которое просто добавляет узлы в точке, где пользователь нажимает:
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
// Create a new scene
let actualScene = SCNScene(named: "art.scnassets/ship.scn")!
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let results = sceneView.hitTest(touch.location(in: sceneView), types: [ARHitTestResult.ResultType.featurePoint])
guard let hitFeature = results.last else { return }
let hitTransform = SCNMatrix4.init(hitFeature.worldTransform) // <- if higher than beta 1, use just this -> hitFeature.worldTransform
let hitPosition = SCNVector3Make(hitTransform.m41,
hitTransform.m42,
hitTransform.m43)
createBall(hitPosition: hitPosition)
}
func createBall(hitPosition : SCNVector3) {
let newBall = SCNSphere(radius: 0.01)
let newBallNode = SCNNode(geometry: newBall)
newBallNode.position = hitPosition
self.sceneView.scene.rootNode.addChildNode(newBallNode)
}
И это работает. Моя проблема в том, что при первом запуске приложения требуется 30-60 секунд простого панорамирования камеры, когда нажатие ничего не дает.
Кажется, что ARKit "загружается", так что, когда я нажимаю в эту первую минуту, никакие узлы не появляются в повернутой позиции. Ничего не происходит в эту первую минуту.
Почему это? Есть ли способ ускорить этот процесс загрузки? Что здесь происходит?
1 ответ
В переопределенной функции viewWillAppear вызовите эту функцию
func setUpSceneView() {
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
sceneView.session.run(configuration)
sceneView.delegate = self
}
и удалить все в viewdidload и добавить то, что вам нужно, в представлении появится