在我的场景编辑器中,我有一个黄色纹理的立方体,名称为立方体。
如何在代码中更改多维数据集的材质?
基本上我应该这样:
let scene = SCNScene(named: "art.scnassets/cubeScene.scn")!
var cube = scene.rootNode.childNodes(named:"cube")
cube.diffuse.contents = UIImage(named: "grid.png")
但这不起作用。什么是正确的方式?
答案 0 :(得分:3)
您问题中的代码无法编译有三个原因:
childNode(named:)
应为childNode(withName:recursively:)
。有重命名的参数和缺少的参数。
childNode(withName:recursively:)
返回的值是可选节点(SCNNode?
) - 因为可能没有具有该名称的节点。
SCNNode
没有diffuse
属性。节点可能具有geometry
,而几何可能具有firstMaterial
。 SCNMaterial
具有漫反射属性。
根据您的需要,最后一行可能如下所示:
cube?.geometry?.firstMaterial?.diffuse.contents = /* ... */
注意所有问号:
cube
后面有一个问号,因为可能不存在具有该名称的节点。 geometry
后面有一个问号,因为并非每个节点都有几何图形。有些节点有灯或摄像头。一些节点只是节点层次结构的一部分。 firstMaterial
后面有一个问号,因为不是每个几何都有材质。此外,某些几何元素具有多个materials
。