2017-02-10 20 views
2

以前の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) 

ような何かをしたが、実際には、矢印の列(x軸に翻訳実際には、Y軸に影響を与える、クローニングされたノードの座標系を持っているようですがあります変更されました)、子オブジェクトはすべて180度回転します。どうして?

カールシギスカーがSCNReferenceNodeを使用するように指示する前に、私はそれをどのように使うべきか、私の目標を達成するかどうかはわかりません。

アップデート:私は子ノードを回転させていなかったが、私はそれを実行したとき、彼らは自動的に(-M​​_PI_2度)回転

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) 

私はこのようなSCNReferenceNodeを試してみました。そして私はx軸で平行移動しましたが、実際には矢印の列ではなく、矢印の列が表示されています。これは、子 - 親ノードの機能ですか?

答えて

1

SCNReferenceNodeを使用した後、ノードを子ノードとして他のノードに追加すると、子ノードは親ノードの位置に設定されます。たとえば、場所(3,4,5)に親ノードがある場合、その子ノードはすべて最初に(3,4,5)に配置されます(後で変更できます)。したがって、矢印の行が必要な場合は、子ノードのxを変更して、y値がゼロに等しくなるようにしてください(&)。 親ノードが回転を適用すると、回転も子ノードに適用されます。