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

时间:2015-11-13 21:13:25

标签: c# unity3d mesh

我之前从未使用过submeshes,但我差点让它们工作。第二次尝试设置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;
}

1 个答案:

答案 0 :(得分:0)

试试这个:

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;
相关问题