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

Unity3D如何用C#脚本修改GameObject的第二个材质颜色?

修改GameObject第二个材质的颜色

你遇到的问题根源很明确:MeshRenderer.material是访问第一个材质的快捷属性,当物体挂载了多个材质时,得通过材质数组来定位到第二个材质进行修改。下面给你两种常用的实现方案,根据你的需求来选:

1. 修改当前物体独有的材质实例(不影响其他物体)

这种方式会为当前物体创建材质的实例副本,修改后只有这个物体的材质会变化,适合需要单独调整某一物体材质的场景:

// 获取目标物体的MeshRenderer组件
MeshRenderer targetRenderer = rayHit.collider.gameObject.GetComponent<MeshRenderer>();

// 获取当前物体的材质实例数组(注意:materials返回的是实例副本)
Material[] materialInstances = targetRenderer.materials;

// 修改第二个材质的颜色(数组索引从0开始,第二个材质对应索引1)
materialInstances[1].color = Color.black;

// 将修改后的数组重新赋值给Renderer,让修改生效
targetRenderer.materials = materialInstances;

2. 修改原始材质资源(影响所有使用该材质的物体)

如果你希望所有用到这个第二个材质的物体都同步变色,可以使用sharedMaterials数组——它直接指向原始材质资源,修改后所有关联物体都会受影响:

MeshRenderer targetRenderer = rayHit.collider.gameObject.GetComponent<MeshRenderer>();
// 直接修改共享材质数组中第二个材质的颜色
targetRenderer.sharedMaterials[1].color = Color.black;

小提醒

  • 别搞混索引:数组从0开始计数,第二个材质对应的是索引1哦。
  • 频繁调用materials会创建新的材质实例,可能带来性能开销,尽量避免在Update这类高频函数里重复执行。

内容的提问来源于stack exchange,提问作者tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:27:54