3

我用搅拌机制作了 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 回答