【问题标题】:function only placing 1 arkit object Node on scenview (Swift4)仅在场景视图(Swift 4)上替换 1 个 arkit 对象节点的功能
【发布时间】:2019-06-26 15:31:27
【问题描述】:

我下面的代码应该将用户创建的 arkit 对象放在场景视图中,但它不起作用。它放置 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

}

【问题讨论】:

    标签: ios swift4 arkit scnscene root-node


    【解决方案1】:

    当您使用 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 放到您拥有球的位置.

    【讨论】:

    • 你能告诉我你需要如何加载场景,拉出你想要放置的节点(可能是你刚刚加载的那个场景的根节点),然后把它放在 .位置就像你在注释掉的代码中有球的示例代码一样。我不知道如何在代码中做到这一点。
    • 我已经更新了我的答案,但我没有完全可操作的示例代码来提供
    • 在 appcoda.com/arkit-3d-object> 有一个这样做的例子
    • 我发现这段代码完全符合我的要求。你能看看我也问过的这个问题吗? stackoverflow.com/questions/54510453/…
    猜你喜欢
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多