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

Unity 3D中Mesh渲染出现IndexOutOfRangeException错误的修复方案

Unity Mesh生成报错IndexOutOfRangeException的修复方案

错误根源分析

  • 顶点数组长度不足:创建顶点数组时计算错误,循环遍历顶点使用z <= zSize和x <= xSize,意味着每个轴上有xSize+1和zSize+1个顶点,总顶点数应为(xSize + 1) * (zSize + 1),而非原代码的xSize * zSize,导致数组容量不足,赋值时触发越界。
  • 三角形生成缺失z轴遍历:原代码仅遍历x方向生成单排三角形,无法构建完整平面,且顶点索引计算未考虑z轴偏移,后续扩展时会引发索引越界。

修改后的CreateShape方法

void CreateShape()
{
    // 修正顶点数组长度,匹配实际生成的顶点数量
    vertices = new Vector3[(xSize + 1) * (zSize + 1)];

    int i = 0;
    for (int z = 0; z <= zSize; z++)
    {
        for (int x = 0; x <= xSize; x++)
        {
            vertices[i] = new Vector3(x, 0, z);
            i++;
        }
    }

    triangles = new int[xSize * zSize * 6];

    int vert = 0;
    int tris = 0;
    // 添加z轴循环,遍历每一行生成网格
    for (int z = 0; z < zSize; z++)
    {
        for (int x = 0; x < xSize; x++)
        {
            triangles[tris + 0] = vert + 0;
            triangles[tris + 1] = vert + xSize + 1;
            triangles[tris + 2] = vert + 1;
            triangles[tris + 3] = vert + 1;
            triangles[tris + 4] = vert + xSize + 1;
            triangles[tris + 5] = vert + xSize + 2;

            vert++;
            tris += 6;
        }
        // 跳过每行最后一个顶点,避免下一行索引错误
        vert++;
    }
}

关键修改说明

  1. 顶点数组长度修正为(xSize + 1) * (zSize + 1),确保能容纳所有生成的顶点。
  2. 新增z轴循环,遍历每一行顶点,生成完整的平面网格三角形数据。
  3. z循环末尾添加vert++,跳过每行最后一个顶点,保证下一行的顶点索引计算正确。

内容的提问来源于stack exchange,提问作者Tadeáš Hrudka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:55:21