簡體   English   中英

SceneKit中的SCNNode父子關系?

[英]SCNNode parent-child relationship in SceneKit?

從我之前的問題 ,我相信克隆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值等於零。 如果父節點應用旋轉,則旋轉也將應用於子節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM