Unity3D中如何修改多材质对象的指定材质?C#赋值不生效怎么办?
问题根因
Unity 中 MeshRenderer.materials、MeshRenderer.sharedMaterials 属性返回的都是材质数组的临时副本,直接对返回的数组按下标赋值,仅会修改这个临时副本的内容,不会同步更新到 MeshRenderer 组件的实际材质配置,因此原有代码操作不生效。
正确实现方案
需要先获取临时数组、修改对应下标值后,再将完整数组重新赋值给 materials 属性,具体代码如下:
public GameObject Cube; public Material Red; public Material Yellow; public Material ResultGreen; void Start() { // 先获取当前材质数组副本 Material[] currentMats = Cube.GetComponent<MeshRenderer>().materials; // 修改第2个材质(对应面板Element 2,索引为1) currentMats[1] = ResultGreen; // 将修改后的数组重新赋值回组件,才会生效 Cube.GetComponent<MeshRenderer>().materials = currentMats; }
补充说明
- 上述写法使用
materials属性会自动生成材质实例,修改仅对当前对象生效,不会影响其他使用同一份原始材质的对象 - 如果需要全局修改同一份材质的表现,可以替换为
sharedMaterials属性操作,不会生成新实例
内容的提问来源于stack exchange,提问作者Mehmood
相关产品推荐
相关产品推荐

