c# - Unity3D - Mesh.colors 非常慢?

标签 c# unity-game-engine mesh

更新(已解决):糟糕的性能是因为我没有意识到 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/

相关文章:

c# - 按位比较两个枚举以获得单个 True 结果?

c# - 将 OpenXML 文档嵌入到另一个 OpenXml 文档中

ios - WebCamTexture iOS 模糊快照

c++ - 加载 .dae 文件时出现问题,索引和顶点加载正确

C# - 将数字四舍五入为 0 位小数

c# - 从 Timer 内的 ListBox 中删除

android - "Not enough storage space"与动态功能模块(App Bundle)一起安装时

java - 操作失败异常 : Installation failed

python - 给定一组三角形顶点和面,分离对象并形成单独的网格

c++ - 如何通过删除 "free faces"从非流形中提取底层 2-流形?