函数仅在场景视图上放置1个arkit对象Node(Swift4)



下面的代码应该将用户创建的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,并将其放在你有球的地方。

相关内容

  • 没有找到相关文章

最新更新