0

我下面的代码应该将用户创建的 arkit 对象放在 scenview 中,但它不起作用。它放置 1 个对象,不能再放置任何其他对象。我注释掉的代码完美地放置了 scn 形状的球,并且在调用函数时与用户请求的一样多。但是它只放置 1 个用户创建的对象,我想放置几个对象。

    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

}
4

1 回答 1

0

当您使用 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

然后从这里开始,就像您通过将节点添加到现有场景中来放置球一样,您可以将node我们刚刚从loadedScene对象中拉出的内容放到您拥有球的位置。

于 2019-02-02T05:36:20.383 回答