我用搅拌机制作了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”。所以我不能为模型制作一个物理体。谁能告诉我为什么会这样呢?
答案 0 :(得分: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()
挑选出您想要的对象,并将其添加到您的场景中。