在 MeshRenderer 中更改 Material

Change Material in MeshRenderer

我的项目中有很多素材,路径如下:

我也有一些使用 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)。我认为我的代码中存在一些错误。请帮忙,非常感谢!

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

Assets/Resources/3DModels/Materials

这样的地方

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

我相信通过这些更正它应该会起作用。

首先,非常感谢 Bart。

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

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

没有必要将 Assets/Resources/ 放在前面,因为 Resources.Load 总是在此文件夹中搜索资产。也没有必要放.mat而且现在我可以换素材

再次感谢 Bart