【发布时间】:2020-02-16 14:57:40
【问题描述】:
更新(已解决):糟糕的表现是因为我没有意识到 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.MarkDynamic() 函数,您可能想尝试一下。除此之外,为了获得一些背景(这可能有助于回答),为什么需要动态生成网格和网格颜色?
-
我尝试了 MarkDynamic(),但它似乎对性能没有明显影响。我要做的是为每个四边形设置不同的颜色。
-
随机并没有那么快。
-
在解决颜色变化方面,多种预制材料(可能在顶部以 90 度的步长旋转)对您有用吗?
-
我解决了这个问题,我没有意识到 Mesh.vertices.length 每次调用都会复制一个数组。