好的,在iOS 11中使用Swift探索ARKit,我制作了一个非常简单的应用程序,只需在用户点击时添加节点:
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正在“加载”,所以当我在第一分钟点击时,没有节点出现在轻敲位置。第一分钟没有任何事情发生。
这是为什么?有没有办法加快这个加载过程?这里发生了什么?
答案 0 :(得分:0)
在覆盖函数viewWillAppear上调用此函数
func setUpSceneView() {
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
sceneView.session.run(configuration)
sceneView.delegate = self
}
并删除viewdidload中的所有内容,并在视图中添加所需内容