我的项目中有很多材料,路径列出如下:
我还有一些使用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)。我认为我的代码中存在一些错误。请多多帮助,非常感谢!
答案 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
。
我认为,通过这些更正,它应该有效。