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

Unity往List添加材质时报Material[]转Material类型转换错误如何解决

错误原因

  • Renderer.materials返回的是Material[]数组类型,而List<Material>.Add()方法仅接受单个Material类型的参数,二者类型不匹配才触发了这个转换报错。
  • 额外注意:如果你的目标是修改材质实例,用materials会自动生成新的材质实例,不会影响原材质资源;如果只需要读取原材质,用sharedMaterials更节省性能。

解决方案

有两种常用的修正写法:

方法1:用AddRange方法直接添加整个数组

AddRange可以直接把整个数组的元素批量添加到List中,不需要额外遍历数组:

public GameObject[] myObjs;
private List<Material> myObjs_mats = new List<Material>();

void Start () {
    for(int i = 0; i < myObjs.Length; i++){
        Renderer rend = myObjs[i].GetComponent<Renderer>();
        // 空判断避免GameObject没有Renderer时报空引用错误
        if(rend != null){
            myObjs_mats.AddRange(rend.materials);
        }
    }
}

方法2:遍历材质数组逐个Add

如果需要对每个材质做额外处理的时候可以用这个写法:

public GameObject[] myObjs;
private List<Material> myObjs_mats = new List<Material>();

void Start () {
    for(int i = 0; i < myObjs.Length; i++){
        Renderer rend = myObjs[i].GetComponent<Renderer>();
        if(rend != null){
            foreach(Material mat in rend.materials){
                // 可在此处添加单个材质的处理逻辑
                myObjs_mats.Add(mat);
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:09:04