Swift3 Scenekit:如何获取所有节点';什么材料?

Swift3 Scenekit:如何获取所有节点';什么材料?,swift3,3d,scenekit,scnnode,scnmaterial,Swift3,3d,Scenekit,Scnnode,Scnmaterial,好的,据我所知,可以在模型编辑器中为.dae或任何用作Xcode中SCNNode的3D模型创建材质: 最顶级的材质会自动应用,一切都很好。我的问题是,我想通过编程在游戏中创建的这些材质之间切换 我试图通过以下方式获得一系列这些材料: node.geometry?.materials 但是,这只返回第一个材质。我试过了所有的方法,但是找不到一种方法去买其他的材料并换成它们。现在我正在尝试: childNode.geometry?.materials = [(childNode.geometry

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

最顶级的材质会自动应用,一切都很好。我的问题是,我想通过编程在游戏中创建的这些材质之间切换

我试图通过以下方式获得一系列这些材料:

node.geometry?.materials
但是,这只返回第一个材质。我试过了所有的方法,但是找不到一种方法去买其他的材料并换成它们。现在我正在尝试:

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

第二种材料的测试结果为零。如何以编程方式在多个材质之间切换?

如果材质未实际指定给其中一个材质窗(例如漫反射),则该材质也不是几何体的一部分

您可以将第二种材质指定给另一个插槽,然后在将材质读入稍后使用的属性后在代码中重置其颜色


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

谢谢。你能更详细地解释一下如何做第一个选项吗?你说的另一个插槽是什么意思?我的意思是,作为一项工作,你可以将第二个纹理/颜色放入例如发射属性中。然后在代码中,您可以读取发射属性的.contents属性,将其保存在自定义属性中,然后将其指定给漫反射窗。只要记住在读取发射槽后将发射重置回黑色即可。