如何将材质添加至Mesh Renderer材质数组末尾?
解决MeshRenderer追加材质的问题
你的代码仅替换了现有材质数组的最后一个元素,核心原因是Unity中MeshRenderer.materials返回的是当前材质数组的副本,直接修改这个副本的元素或试图扩展长度不会同步到Renderer上。要实现追加材质,需要创建新数组并重新赋值:
[SerializeField] private MeshRenderer meshRenderer; public void PushMaterial(Material newMaterial) { // 空引用检查 if (!meshRenderer || !newMaterial) return; // 获取当前材质数组副本 Material[] currentMaterials = meshRenderer.materials; // 创建长度+1的新数组 Material[] newMaterials = new Material[currentMaterials.Length + 1]; // 复制原数组元素到新数组 currentMaterials.CopyTo(newMaterials, 0); // 追加新材质到末尾 newMaterials[newMaterials.Length - 1] = newMaterial; // 将新数组赋值回Renderer,完成更新 meshRenderer.materials = newMaterials; }
关键说明:
- 必须通过重新赋值
meshRenderer.materials才能让Renderer识别新的材质数组,直接操作返回的副本不会生效。 - 如果使用共享材质(修改会影响所有使用该材质的对象,无需实例化),可以替换为
sharedMaterials,逻辑完全一致:Material[] currentMaterials = meshRenderer.sharedMaterials; // ... 后续步骤相同 meshRenderer.sharedMaterials = newMaterials; - 确保
newMaterial为有效引用(你已确认),避免空元素加入数组。
内容的提问来源于stack exchange,提问作者user17248503
相关产品推荐
相关产品推荐

