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

如何将材质添加至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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:50:40