От моего прежнего question, я считаю, что клонирование SCNNode - это способ решить проблему загрузки нескольких объектов. Однако я понял, что что-то не так.SCNNode отношения родитель-ребенок в SceneKit?
я сделал что-то вроде
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)
Я ожидаю, что есть ряд стрелок, отображающая, но на самом деле есть столбец стрелок (Транслейтинг в оси х, но на самом деле, влияющих на оси Y, кажется, система координат клонированного узла имеет было изменено), а все дочерние объекты вращаются на 180 градусов. Зачем?
Перед тем, как Карл Сигискар сказал мне использовать SCNReferenceNode, я не уверен, как его использовать и достигнет моей цели?
Update:
Я пытался 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, но на самом деле есть столбец стрелок, а не ряд стрелок. Является ли это признаком дочернего родительского узла?