在我的场景编辑器中,我有一个带有黄色纹理的立方体,其名称为立方体。
如何在代码中更改立方体的 Material ?
基本上我应该是这样的:
let scene = SCNScene(named: "art.scnassets/cubeScene.scn")!
var cube = scene.rootNode.childNodes(named:"cube")
cube.diffuse.contents = UIImage(named: "grid.png")
但这行不通。什么是正确的方法?
最佳答案
您问题中的代码由于三个原因无法编译:
childNode(named:)
应该是childNode(withName:recursively:)
.既有重命名的参数,也有缺失的参数。从
childNode(withName:recursively:)
返回的值是一个可选节点(SCNNode?
)——因为可能没有具有该名称的节点。SCNNode
没有diffuse
属性(property)。一个节点可能有一个geometry
一个几何体可能有一个firstMaterial
.SCNMaterial
具有漫射特性。
根据您的需要,最后一行可能如下所示:
cube?.geometry?.firstMaterial?.diffuse.contents = /* ... */
注意所有的问号:
cube
后面有个问号因为可能不存在具有该名称的节点。-
geometry
后面有个问号因为并非每个节点都有几何图形。一些节点有灯或摄像头。一些节点只是节点层次结构的一部分。 -
firstMaterial
后面有个问号因为不是每个几何体都有 Material 。此外,一些几何元素有多个materials
.
关于swift - 以编程方式更改 scn 对象的 Material ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716373/