Unity高分辨率下生成单网格Cube变为平面问题求解
问题产生原因
- 核心原因是Unity默认Mesh使用16位无符号整数存储三角形索引,可表示的最大值仅为65535。当
resolution参数升高时,单个网格的总顶点数会快速超过该阈值,导致索引溢出,三角形数据被错误解析,最终表现为网格变形、逐渐变成平面。 - 次要潜在问题:直接用
Vector3作为字典Key做顶点去重,浮点数计算的精度误差可能导致网格边缘本该合并的顶点没有被正确合并,不过这不是高分辨率下网格异常的核心诱因。
修复方案
- 强制设置Mesh使用32位索引格式,在给Mesh赋值顶点、三角形数据之前添加对应配置即可,32位索引最大可支持40亿以上的顶点数,完全满足
resolution上限为512的使用需求。 - (可选)优化顶点去重逻辑:将顶点坐标按精度要求缩放后转成整数作为Key,避免浮点数精度误差导致的去重失效。
修改后的核心代码片段
var mesh = meshFilter.sharedMesh; mesh.Clear(); // 新增此行,设置32位索引格式 mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; mesh.vertices = verts.ToArray(); mesh.triangles = triangles.ToArray(); mesh.RecalculateNormals();
内容的提问来源于stack exchange,提问作者Deamonpog
相关产品推荐
相关产品推荐

