C# 如何使统一颜色像指针一样工作?

C# 如何使统一颜色像指针一样工作?,c#,unity3d,C#,Unity3d,我用六个三角形的网格画一个六边形。 Unity网格将颜色保存在顶点中。 颜色是统一引擎的颜色 我希望我的颜色可以用作指针。因此,我只需更改变量,所有顶点都会更新。但它不起作用。六边形为白色1f、1f、1f,而非青色0f、1f、1f 出于性能原因,我想使用ponter机械师 如果您有解决方案,请告诉我 Color devColor = new Color(1f, 1f, 1f); meshVertexColor[0] = devColor; mesh

我用六个三角形的网格画一个六边形。 Unity网格将颜色保存在顶点中。 颜色是统一引擎的颜色

我希望我的颜色可以用作指针。因此,我只需更改变量,所有顶点都会更新。但它不起作用。六边形为白色1f、1f、1f,而非青色0f、1f、1f

出于性能原因,我想使用ponter机械师

如果您有解决方案,请告诉我

        Color devColor = new Color(1f, 1f, 1f);
        meshVertexColor[0] = devColor;
        meshVertexColor[1] = devColor;
        meshVertexColor[2] = devColor;
        meshVertexColor[3] = devColor;
        meshVertexColor[4] = devColor;
        meshVertexColor[5] = devColor;
        meshVertexColor[6] = devColor;
        meshVertexColor[7] = devColor;
        meshVertexColor[8] = devColor;
        meshVertexColor[9] = devColor;
        meshVertexColor[10] = devColor;
        meshVertexColor[11] = devColor;
        meshVertexColor[12] = devColor;
        meshVertexColor[13] = devColor;
        meshVertexColor[14] = devColor;
        meshVertexColor[15] = devColor;
        meshVertexColor[16] = devColor;
        meshVertexColor[17] = devColor;

        devColor.r = 0f;
是结构值类型,而不是引用

当你设定

meshVertexColor[0] = devColor;
它是按值传递的,因此您实际上存储了devColor的副本。之后对本地devColor值的任何更改都不会自动更新数组/列表中的值

假设你正在谈论你宁愿做一些类似的事情

public void SetNewColor(Mesh mesh, Color color)
{
    var colors = mesh.colors;
    for(var i = 0; i < colors.Length; i++)
    {
        colors[i] = color;
    }
    mesh.colors = colors;
}
如果您愿意,也可以将其作为扩展

public static class MeshExtensions
{
    public static void SetNewColor(this Mesh mesh, Color color)
    {
        var colors = mesh.colors;
        for(var i = 0; i < colors.Length; i++)
        {
            colors[i] = color;
        }
        mesh.colors = colors;
    }
}
public static class MeshExtensions
{
    public static void SetNewColor(this Mesh mesh, Color color)
    {
        var colors = mesh.colors;
        for(var i = 0; i < colors.Length; i++)
        {
            colors[i] = color;
        }
        mesh.colors = colors;
    }
}
devColor.r = 0;
theMesh.SetNewColor(devColor);