You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:27:05