ios - SceneKit 中的 SCNNode 父子关系?

标签 ios swift3 scenekit

来 self 以前的question ,我相信克隆 SCNNode 是解决加载多个对象问题的方法。但是,我意识到有些不对劲。

我做了类似的事情

arrow = scnScene.rootNode.childNode(withName: "arrow", recursively:true)
arrow.rotation = SCNVector4(0, 0, 1, M_PI_2)
arrow.position = SCNVector3(x: 0, y: 0, z: -3);
let sign = SCNNode()
for i in 0..<10{
    let node = arrow.clone()
    node.position = SCNVector3(i+1,0,0)
    sign.addChildNode(node)
}
arrow.addChildNode(sign)

我希望显示一行箭头但实际上有一列箭头(在 x 轴上平移但实际上影响 y 轴,似乎克隆节点的坐标系已更改)显示并且所有子对象旋转 180 度.为什么?

在 Karl Sigiscar 告诉我使用 SCNReferenceNode 之前,我不确定我应该如何使用它以及它是否会实现我的目标?

更新:

我试过 SCNReferenceNode 是这样的:

    let scnScene = SCNScene()

    if let filePath = Bundle.main.path(forResource: "arrowsign", ofType: "dae", inDirectory: "art.scnassets") {
        // ReferenceNode path -> ReferenceNode URL
        let referenceURL = NSURL(fileURLWithPath: filePath)


        if #available(iOS 9.0, *) {
            arrow = SCNReferenceNode(url: referenceURL as URL!)!
            arrow.load()
            arrow.rotation = SCNVector4(0, 0, 1, -M_PI_2)
            arrow.position = SCNVector3(0,0,-5)

            // Create reference node
            for i in 0..<10{
                let referenceNode : SCNReferenceNode = SCNReferenceNode(url: referenceURL as URL)!
                referenceNode.load()
                referenceNode.position = SCNVector3(i+1, 0, 0);
                arrow.addChildNode(referenceNode)
            }
        }
    }
    scnScene.rootNode.addChildNode(arrow)

我没有旋转子节点,但是当我运行它时它们会自动旋转(-M_PI_2 度)。我确实在 x 轴上进行了翻译,但实际上显示的是一列箭头,而不是一行箭头。这是子节点的特征吗?

最佳答案

使用SCNReferenceNode后,我想通了,如果将一个节点添加到另一个节点作为子节点,子节点将被设置为父节点的位置。比如在位置(3,4,5)有一个父节点,那么它的所有子节点首先会位于(3,4,5)(以后可以修改)。所以如果你想要一行箭头,只需修改子节点的 x 并保持 y & z 值等于零。 如果父节点应用旋转,则旋转也将应用于子节点。

关于ios - SceneKit 中的 SCNNode 父子关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42155846/

相关文章:

ios - 在 Swift 中使用 for 循环完成

swift - 使用 SceneKit (SCNView) 显示统计信息(Swift 4/iOS 11 beta)

ios - 使用 Objective C 类的参数调用 Swift 函数

methods - 如何从方法的闭包中删除强引用循环?

ios - NSCache 是否跨 ViewControllers 持久存在?

ios - 如何在 swift 3 中将 NsArraym 设置为 NSString

iphone - ARKit是否考虑iPhone和iPad中的镜头变形?

swift - ARKit – 光估计

iphone - 如何检查 NSString = 特定字符串值?

ios - 如何以编程方式知道任何文件是否加密?- iPhone