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?