下面的代码应该将用户创建的arkit对象放在场景视图中,但它不起作用。它放置1个对象,不能再放置任何其他对象。我注释的代码完美地放置了scn形状的球,并且在调用函数时可以根据用户的要求放置。然而,它只放置了一个用户创建的对象,我想放置几个对象。
func createBall(hitPosition : SCNVector3) {
// let newBall = SCNSphere(radius: 0.01)
// let newBallNode = SCNNode(geometry: newBall)
// newBallNode.position = hitPosition
// self.sceneView.scene.rootNode.addChildNode(newBallNode)
let scene = SCNScene(named: "art.scnassets/dontCare.scn")!
// Set the scene to the view
sceneView.scene = scene
}
使用ARkit时,只处理单个场景,因此如果要放置的对象是从.scn
文件加载的,则需要加载场景,拉出要放置到位的节点(可能是刚刚加载的场景的根节点),把它放在.position
上,就像在注释掉的代码中有球的示例代码一样。
你可能会发现提前加载场景并获取rootNode
很有用,这样你就可以随心所欲地将它放在它击中你的场地测试的位置。
更新:我只带了iPad,没有笔记本电脑,也没有可以轻松共享的即时游乐场,其中包含.scn文件。假设你从一个.scn文件开始,该文件中有你想放置的对象作为它的根节点,类似于:
guard let loadedScene = SCNScene(named: "something.scn")
else { fatalError("Unable to load scene file.") }
let node = loadedScene.rootnode // type of this attribute is an SCNNode
然后从这里开始,就像你通过将节点添加到现有场景中来放置球一样,你可以从loadedScene
对象中提取node
,并将其放在你有球的地方。