在MeshRenderer中更改材质

时间:2015-02-26 08:41:16

标签: unity3d unityscript

我的项目中有很多材料,路径列出如下:

  • Assets / 3DModels / Materials / 01 - white.mat
  • Assets / 3DModels / Materials / 02 - black.mat
  • Assets / 3DModels / Materials / 03 - red.mat
  • Assets / 3DModels / Materials / 04 - green.mat
  • Assets / 3DModels / Materials / 05 - blue.mat
  • 资产/ 3D模型/材料/ 06 - purple.mat

我还有一些使用3ds max创建并导入Unity的3D模型。模型具有Mesh Renderer组件,其中包含一个名为Materials的数组。在3ds max中设置,所有模型都使用01 - white.mat作为数组Materials中的Element0。

在运行时,我想使用C#脚本将数组Materials的Element0更改为04 - green.mat。因此,我有以下代码:

public void changeMaterial(){
    MeshRenderer mr = this.Transform.GetComponent<MeshRenderer>();
    mr.material =  Resources.Load("3DModels/Materials/04 - green.mat", typeof(Material)) as Material;
}

当我运行它时,对象的Element0变为None(Material)。我认为我的代码中存在一些错误。请多多帮助,非常感谢!

2 个答案:

答案 0 :(得分:2)

首先,非常感谢Bart。

正如Bart所说,我将文件夹3DModel放在Resources文件夹下。在我的程序中,我改变了一点,所以我有

Resources.Load("3DModels/Materials/04 - green", typeof(Material)) as Material;

由于Assets/Resources/始终在此文件夹中搜索资源,因此无需将Resources.Load放在前面。也没有必要放.mat现在我可以更改材料了。

再次,非常感谢巴特

答案 1 :(得分:1)

如果您希望资产在运行时可用,并通过Resources.Load()来电you'll have to put them in a Resources folder加载。所以把它们放在像

Assets/Resources/3DModels/Materials

这样的东西中

此外,您的代码还有另一个小问题。 Unity中的某些属性以意想不到的方式运行。在这种情况下,设置材料不会起作用。您必须创建一个材料数组(即使它只有一个元素)并将其分配给mr.materials

我认为,通过这些更正,它应该有效。