更新(已解决):糟糕的性能是因为我没有意识到 Mesh.vertices.Length 在每次调用时都会进行数组复制。
我需要按程序生成四边形网格。理想情况下,我希望能够更改各个四边形的颜色。不过,如果颜色差异仅发生在 x 轴上,也没关系(见下图)。
但是设置 Mesh.Colors 非常 慢。例如,为 100,000 个顶点设置颜色大约需要 10000 毫秒。我怎样才能更高效地做到这一点?我做错了什么吗?
void CreateMesh()
{
Mesh.Clear();
Mesh.vertices = Vertices.ToArray();
Mesh.triangles = Triangles.ToArray();
// Set Colors to Mesh
Color32[] colors = new Color32[] { new Color32(0, 255, 0, 255), new Color32(255, 0, 255, 255), new Color32(0, 0, 255, 255) };
Color32[] colorsArray = new Color32[Mesh.vertices.Length];
System.Random rnd = new System.Random();
for (int i = 0; i < Mesh.vertices.Length; i++)
colorsArray[i] = colors[rnd.Next(0, 2)];
Mesh.colors32 = colorsArray;
}
最佳答案
所以我没有意识到 Mesh.vertices.length
在每次调用时都会进行数组复制。什么!?
修复此问题之前计算长度:
void CreateMesh()
{
Mesh.Clear();
Mesh.vertices = Vertices.ToArray();
Mesh.triangles = Triangles.ToArray();
Mesh.MarkDynamic();
int len = Mesh.vertices.Length;
// Set Colors to Mesh
Color32[] colors = new Color32[] { new Color32(0, 255, 0, 255), new Color32(255, 0, 255, 255), new Color32(0, 0, 255, 255) };
Color32[] colorsArray = new Color32[len];
System.Random rnd = new System.Random();
for (int i = 0; i < len; i++)
colorsArray[i] = colors[rnd.Next(0, 2)];
Mesh.colors32 = colorsArray;
}
关于c# - Unity3D - Mesh.colors 非常慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60249778/