在 MeshRenderer 中更改 Material
Change Material in MeshRenderer
我的项目中有很多素材,路径如下:
- 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
- Assets/3DModels/Materials/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)。我认为我的代码中存在一些错误。请帮忙,非常感谢!
如果您希望资产在 运行 时可用并通过 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
我的项目中有很多素材,路径如下:
- 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
- Assets/3DModels/Materials/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)。我认为我的代码中存在一些错误。请帮忙,非常感谢!
如果您希望资产在 运行 时可用并通过 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