2017-02-10 4 views
2

Von meinem ehemaligen question glaube ich, Klonen der SCNNode ist die Möglichkeit, das Problem des Ladens mehrerer Objekte zu lösen. Ich habe jedoch festgestellt, dass etwas nicht stimmt.SCNNode Eltern-Kind-Beziehung in SceneKit?

Ich habe so etwas wie

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) 

Ich erwarte, dass es eine Reihe von Pfeilen angezeigt wird, aber tatsächlich gibt es eine Spalte der Pfeile (in x-Achse zu übersetzen, aber in der Tat y-Achse zu beeinflussen, geklont scheint Koordinatensystem der Knoten wurde geändert) Anzeige und alle Kinderobjekte drehen sich um 180 Grad. Warum?

Bevor Karl Sigiscar mir sagte, SCNReferenceNode zu verwenden, bin ich nicht sicher, wie ich es benutzen soll und wird es mein Ziel erreichen?

Update:

Ich versuchte SCNReferenceNode wie folgt aus:

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) 

Ich habe nicht drehen Kind-Knoten aber sie automatisch gedreht (-M_PI_2 Grad), wenn ich es laufen. Und ich habe in X-Achse übersetzt, aber in Wirklichkeit gibt es eine Pfeilspalte, anstatt einer Reihe von Pfeilen. Ist das ein Feature von Kind-Eltern-Knoten?

Antwort

1

Nachdem ich SCNReferenceNode verwendet habe, habe ich herausgefunden, wenn Sie einen Knoten zu einem anderen Knoten als Kind hinzufügen, wird der Kindknoten auf den Standort des Elternknotens gesetzt. Zum Beispiel gibt es einen Elternknoten in Position (3,4,5), dann werden alle Kindknoten davon zuerst in (3,4,5) lokalisiert (Sie können später modifizieren). Wenn Sie also eine Reihe von Pfeilen haben möchten, ändern Sie einfach die x-Werte der untergeordneten Knoten und behalten Sie den Wert y & z gleich null bei. Wenn der übergeordnete Knoten eine Rotation anwendet, wird die Rotation auch auf untergeordnete Knoten angewendet.

Verwandte Themen