2016-07-19 5 views
0

SCNNodeを複数回コピーしたいと思います。各ノードと異なる位置に異なる素材があります。しかし、同じ規模を維持する。したがって、私がコピーしたノードのスケールを変更すると、コピーされたノードはすべて変更されるはずです。SCNNodeをコピーして縮尺を維持することができます

次のコードでは、changeScale()を実行すると、コピーされたノードの縮尺が変更されません。

コピーされたすべてのノードの縮尺やジオメトリのサイズを一緒に変更する方法はありますか。

let mainNode = SCNNode() 
let mainGeo = SCNPlane(width: CGFloat(4), height: CGFloat(4)) 
mainNode.geometry = mainGeo 

for var i = 1; i <= 10; i += 1 { 
    let thisNode = mainNode.copy() as! SCNNode 
    thisNode.position = SCNVector3Make(Float(rx), Float(ry), Float(rz)) 

    thisNode.geometry = thisNode.geometry!.copy() as? SCNGeometry 
    thisNode.geometry?.firstMaterial = thisNode.geometry?.firstMaterial!.copy() as? SCNMaterial 

    if i == 0 { 
     thisNode.geometry?.firstMaterial?.diffuse.contents = UIColor.blueColor() 
    } else { 
     thisNode.geometry?.firstMaterial?.diffuse.contents = UIColor.redColor() 
    } 
    scene.rootNode.addChildNode(thisNode) 

} 

func changeScale() { 
    mainNode.scale = SCNVector3Make(7, 7, 7) 
} 

答えて

0

を列挙するか、それらを個別に変更することなく、私はこれが正解であるかどうかを確認していません。私はスイフトやイオスの専門家ではないので。 ノードがコピーまたはクローン化されたときのように、ノードはジオメトリなどの割り当てられた情報とは別のプロパティを持ちません。 私は最初に、スケールまたは位置などのコピーされたすべてのノードで同じプロパティを保持できると考えました。

私が望んだことは、すべてのノードまたはジオメトリのサイズを一緒に変更できるスケールで、作成時に各ノードごとに異なる位置と材料を持つことでした。

ノードやジオメトリのが複数回作成される今、彼らはすべて異なっていて、一緒にサイズや拡大縮小することはできません

だから私がやったこと:

  • メインノード複数回コピーは、与えましたそれは別の位置
  • メインのジオメトリ(外側)を1つ作成し、メインノードに
    という特定のサイズを設定します。したがって、すべてのメインノードが異なる材料特性
  • 追加されたサブノードにSCNTransformConstraintと
  • メインノードにサブノードを追加しました。このジオメトリを使用し、主材料のサイズに に従って変換する

したがって、ジオメトリサイズを編集するたびに、サブノードのサイズがすべて変更されます。 この方法がどのようにスピード/パフォーマンスであるか分かりません。しかし、すべてのノードを列挙するよりも良いでしょう。

関連する問題