Unity MeshRenderer.materials数组索引超出范围

本文关键字:范围 索引 数组 MeshRenderer materials Unity | 更新日期: 2023-09-27 18:21:48

我以前从未使用过子网格,但我几乎让它们正常工作。在第二次尝试设置meshRenderer材质的mainTexture时,我得到了一个"数组索引超出范围"错误。我将subMeshCount设置为2,并尝试在索引0和索引1处应用2种材质。我很难理解索引1是如何越界的。是否有一行代码可以告诉渲染器需要多少材质?谢谢你抽出时间。

编辑:有点误解了错误日志。

 void Update () {
    List<Vector3> vertices = new List<Vector3>();
    List<int> dirtTriangles = new List<int>();
    List<int> grassTriangles = new List<int>();
    List<Vector2> uvList = new List<Vector2>();
    mesh.Clear ();
    //draw faces
    addFace(mesh,uvList,vertices,dirtTriangles,DIR.front);
    addFace (mesh,uvList,vertices,dirtTriangles,DIR.back);
    addFace (mesh,uvList,vertices,dirtTriangles,DIR.left);
    addFace (mesh,uvList,vertices,dirtTriangles,DIR.right);
    addFace (mesh,uvList,vertices,grassTriangles,DIR.top);
    addFace (mesh,uvList,vertices,dirtTriangles,DIR.bottom);
    mesh.vertices = vertices.ToArray ();
    //mesh.triangles = triangles.ToArray();
    mesh.subMeshCount = 2;
    mesh.SetTriangles (dirtTriangles.ToArray(),0);
    mesh.SetTriangles (grassTriangles.ToArray(),1);
    mesh.RecalculateNormals();
    mesh.uv = uvList.ToArray();
    //set materials
    meshRenderer.materials[0].mainTexture = Resources.Load("block_speckled") as Texture;
    meshRenderer.materials[1].mainTexture = Resources.Load("block_grass") as Texture; //error
    var shader = Shader.Find ("Particles/Alpha Blended");
    meshRenderer.materials[0].shader = shader; //not sure if this is correct either
    meshRenderer.materials[1].shader = shader;
}

Unity MeshRenderer.materials数组索引超出范围

试试这个:

meshRenderer.materials = new[] 
{
    new Material(Shader.Find("Your/Shader")), 
    new Material(Shader.Find("Your/Shader"))
}
meshRenderer.materials[0].mainTexture = Resources.Load("AssetName") as Texture;
meshRenderer.materials[1].mainTexture = Resources.Load("AssetName") as Texture;