Skinned Mesh Renderer多层材质赋值

Unity中Skinned Mesh Renderer上的材质可以挂多个,而Skinned Mesh Renderer有两个属性可以用来访问材质,一个是material,另一个是materials。

material

第一个属性material是返回材质数组A的第一层材质(下标为0),也可以直接通过给这个属性赋值来改变第一层材质。

materials

第二个属性materials是返回材质数组A,但我们不能直接操作这个数组,因为Unity中返回的数组都是拷贝,所以我们想改变的话需要新建一个材质数组B,然后把B赋给A。

修改材质

Unity这样的设计方式实际上很蠢,我们在很多地方需要自己声明新的数组变量。下面告诉大家不同情况下Unity中材质的正确赋值方法。

修改单层材质的方法:

1
unit_renderer.material = anotherMat;//修改单层材质只需要直接给material赋值

修改多层材质的方法:

1
2
3
Material[] mats = unitRenderer.materials;//先把新建材质数组,值为现有的材质数组
mats[1] = anotherMat;//修改第二层材质为某个材质
unitRenderer.materials = mats;//把修改过的材质数组赋给Skinned Mesh Renderer

也可以使用new方法初始化:Material[] mats = new Materials[]{bodyMat, headMat};,这种方式是动态初始化。

参考链接:renderer.materials not working.