QuadUtility.ToQuads 卡顿
当对复杂网格体(顶点>10000)使用 Probuilderize 命令或者涉及MeshImporter.Import 函数时会卡住很久(几分钟以上)
-
版本
5.2.2 -
原因
函数 GetQuadScore 反复调用 mesh.GetVertices() -
解决
在外部调用 mesh.GetVertices() 并缓存结果
原始代码Dictionary<EdgeLookup, float> connections = new Dictionary<EdgeLookup, float>(); for (int i = 0; i < wings.Count; i++) { using (var it = new WingedEdgeEnumerator(wings[i])) { while (it.MoveNext()) { var border = it.Current; if (border.opposite != null && !connections.ContainsKey(border.edge)) { float score = mesh.GetQuadScore(border, border.opposite); connections.Add(border.edge, score); } } } }
改造后代码
Dictionary<EdgeLookup, float> connections = new Dictionary<EdgeLookup, float>(); Vertex[] vertices = mesh.GetVertices(); // 只调用一次 for (int i = 0; i < wings.Count; i++) { using (var it = new WingedEdgeEnumerator(wings[i])) { while (it.MoveNext()) { var border = it.Current; if (border.opposite != null && !connections.ContainsKey(border.edge)) { float score = GetQuadScore(vertices, border, border.opposite); connections.Add(border.edge, score); } } } }