Я экспериментировал с ARKit на Swift Playgrounds.Я написал стартовый код, но когда я запускаю его, ничего не происходит.Вместо оценки кода, он отображает всплывающее окно, которое показывает все проблемы в коде.
Я знаю, что код, который я использую, работает, потому что я использовал тот же код на iPad под управлением более старой версии Swift Playgrounds, и код работает отлично.Кажется, это проблема с Swift Playgrounds 3 или Swift 5.
Вот интересная часть.Когда я удаляю строку кода, которая запускает инициализатор ARWorldTrackingConfiguration
, и код, который делает контроллер представления делегатом сеанса и сцены, код выполняется просто отлично.Когда я ставлю его обратно, он снова делает ту же ошибку.Я не знаю, что происходит.
Я использую Swift Playgrounds 3.0 и iPad 6-го поколения.Детская площадка использует ARKit, UIKit, SceneKit и PlaygroundSupport.
Наконец, вот некоторый код.
// Code inside modules can be shared between pages and other source files.
import ARKit
import SceneKit
import UIKit
extension ARSCNView {
public func setup(){
antialiasingMode = .multisampling4X
automaticallyUpdatesLighting = false
preferredFramesPerSecond = 60
contentScaleFactor = 1.0
if let camera = pointOfView?.camera {
camera.wantsHDR = true
camera.wantsExposureAdaptation = true
camera.exposureOffset = -1
camera.minimumExposure = -1
camera.maximumExposure = 3
}
}
}
public class vc : UIViewController, ARSessionDelegate, ARSCNViewDelegate {
var arscn : ARSCNView!
var scene : SCNScene!
public override func loadView() {
arscn = ARSCNView(frame: CGRect(x: 0, y: 0, width: 768, height: 1024))
arscn.delegate = self
arscn.setup()
scene = SCNScene()
arscn.scene = scene
var config = ARWorldTrackingConfiguration()
config.planeDetection = .horizontal
arscn.session.delegate = self
self.view = arscn
arscn.session.run(configåå)
}
public func session(_ session: ARSession, didFailWithError error: Error) {
// Present an error message to the user
}
public func sessionWasInterrupted(_ session: ARSession) {
// Inform the user that the session has been interrupted, for example, by presenting an overlay
}
public func sessionInterruptionEnded(_ session: ARSession) {
// Reset tracking and/or remove existing anchors if consistent tracking is required
}
}
Наконец, обратите внимание, что я представляю живое представление на главной странице игровой площадки и помещаю класс в общий код.