3

Blenderで3Dモデルを作ったので、シーンキットで使いたいです。

var platform = SCNNode();
let dae = SCNScene(named:"platform.dae");
platform = dae!.rootNode;
platform.position = SCNVector3(x: 0,y: 0,z:0);
if platform.geometry == nil {
    print("geo is nil.")
}
platform.geometry?.firstMaterial?.diffuse.contents = "wood.png";
platform.geometry?.firstMaterial?.diffuse.wrapS = SCNWrapMode.Repeat
platform.geometry?.firstMaterial?.diffuse.wrapT = SCNWrapMode.Repeat
platform.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: SCNPhysicsShape(node: platform, options: nil));
scene.rootNode.addChildNode(platform);

常に「geo is nil」と出力されます。そのため、モデルの物理ボディを作成できません。なぜこれが起こるのか誰か教えてもらえますか?

4

1 に答える 1

3

DAE ファイルをロードすると、完全なノード ツリーが返されます。Blender ファイルにライトとカメラがある場合 (ほとんどの場合そうです)、DAE のノード ツリーもそうです。ルートSCNNodeにはジオメトリがありません (ジオメトリがある必要はありませんSCNNode)。しかし、あなたはそうする子供たちを見つけることができます。

print (platform)
platform.childNodes.map {
    print($0.name, $0.geometry)
}

生産する

<SCNNode: 0x7fe008e938d0 | 3 children>
Optional("Camera") nil
Optional("Lamp") nil
Optional("Cube") Optional(<SCNGeometry: 0x7fe00ab08930 'Cube'>)

childNodeWithName()またはを使用childNodesPassingTest()して、必要なオブジェクトを選択し、シーンに追加できます。

于 2016-01-11T04:17:35.070 に答える