Scenekit:如何获取节点的所有材料?

Scenekit: How to get all of node's materials?

好的,据我所知,materials 可以为 .dae 或任何用作 SCNNode 的 3D 模型创建 Xcode 在这里,在模型的编辑器中:

最上面的 material 会自动应用,一切正常。我的问题是我想以编程方式在我的游戏中创建的这些 material 之间切换。

我试图通过以下方式获取这些 material 的数组:

node.geometry?.materials

然而这只是 returns 那第一个 material。我尝试了所有方法,但无法找到获取其他 material 并切换到它们的方法。现在我正在尝试:

childNode.geometry?.materials = [(childNode.geometry?.material(named: "test"))!]
//childNode is the node

其中测试是第二个 material 但它发现它为零。如何以编程方式在多个 material 之间切换?

如果 material 实际上没有分配给 material 插槽之一(例如漫反射),它也不是几何体的一部分。

您可以将第二个 material 分配给另一个插槽,然后在将 material 读入 属性 以供稍后使用后在代码中重置其颜色。

我自己使用的另一个选项是将多个 material 分配给同一模型的不同面(在第三方 3d 软件中)。导出为 dae,添加到 xcode,然后自动将几何体分成单独的元素,每个元素都有自己的 material。然后我可以在 xcode 中进行调整,并按照您尝试的方式迭代。