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

C# Mesh类开发遇「并非所有代码路径都返回值」报错如何解决

问题原因&修复方案

1. 「并非所有代码路径都返回值」报错直接原因

你的方法声明为返回Mesh类型,但方法执行完所有逻辑后没有添加return语句返回对应结果,触发C#语法校验错误。

2. 代码中隐藏的其他BUG

  • UV赋值逻辑错误:4行UV赋值语句全部写死为vIndex0索引,vIndex1/vIndex2/vIndex3对应的UV没有被赋值,运行后新添加的面片纹理会显示异常
  • 扩容后的数组未回写Mesh:你新建了扩容后的vertices、uvs、triangles数组并填充了数据,但没有赋值回mesh实例的对应属性,修改不会生效
  • 三角形数组未补全新面片的索引:你给triangles数组扩容了6位(对应1个四边形的2个三角形),但没有给新增的6个索引位置赋值,新的面片不会被渲染

修改后的完整代码

public static Mesh AddToMesh(Mesh mesh, Vector3 pos, float rot, Vector3 baseSize, Vector2 uv00, Vector2 uv11)
{
    if (mesh == null)
    {
        mesh = CreateEmptyMesh();
    }
    Vector3[] vertices = new Vector3[4 + mesh.vertices.Length];
    Vector2[] uvs = new Vector2[4 + mesh.uv.Length];
    int[] triangles = new int[6 + mesh.triangles.Length];

    mesh.vertices.CopyTo(vertices, 0);
    mesh.uv.CopyTo(uvs, 0);
    mesh.triangles.CopyTo(triangles, 0);

    int index = vertices.Length / 4 - 1;
    //relocate vertices
    int vIndex = index * 4;
    int vIndex0 = vIndex;
    int vIndex1 = vIndex + 1;
    int vIndex2 = vIndex + 2;
    int vIndex3 = vIndex + 3;

    baseSize *= .5f;

    bool skewed = baseSize.x != baseSize.y;
    if (skewed)
    {
        vertices[vIndex0] = pos + GetQuaternionEuler(rot) * new Vector3(-baseSize.x, baseSize.y);
        vertices[vIndex1] = pos + GetQuaternionEuler(rot) * new Vector3(-baseSize.x, -baseSize.y);
        vertices[vIndex2] = pos + GetQuaternionEuler(rot) * new Vector3(baseSize.x, -baseSize.y);
        vertices[vIndex3] = pos + GetQuaternionEuler(rot) * baseSize;
    }
    else
    {
        vertices[vIndex0] = pos + GetQuaternionEuler(rot - 270) * baseSize;
        vertices[vIndex1] = pos + GetQuaternionEuler(rot - 180) * baseSize;
        vertices[vIndex2] = pos + GetQuaternionEuler(rot - 90) * baseSize;
        vertices[vIndex3] = pos + GetQuaternionEuler(rot - 0) * baseSize;
    }
    //relocate uvs 修正索引错误
    uvs[vIndex0] = new Vector2(uv00.x, uv11.y);
    uvs[vIndex1] = new Vector2(uv00.x, uv00.y);
    uvs[vIndex2] = new Vector2(uv11.x, uv00.y);
    uvs[vIndex3] = new Vector2(uv11.x, uv11.y);

    // 补全新增三角形索引
    int tIndex = index * 6;
    triangles[tIndex + 0] = vIndex0;
    triangles[tIndex + 1] = vIndex3;
    triangles[tIndex + 2] = vIndex1;
    triangles[tIndex + 3] = vIndex1;
    triangles[tIndex + 4] = vIndex3;
    triangles[tIndex + 5] = vIndex2;

    // 数组回写mesh
    mesh.vertices = vertices;
    mesh.uv = uvs;
    mesh.triangles = triangles;

    // 补充返回语句 解决返回值报错
    return mesh;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:06:04