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;
}
试试这个:
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;