首页 > 解决方案 > 如何使 Unity Color 像指针一样工作?

问题描述

我正在使用六个三角形的网格在 Unity 中绘制一个六边形。Unity 网格将颜色保存在顶点中。颜色是 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;

标签: c#unity3d

解决方案


Colorstruct类型)而不是引用。

当你设置

meshVertexColor[0] = devColor;

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

假设你在谈论Mesh.colors你宁愿做类似的事情

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;
}

所以每当你改变devColor你调用这个方法的价值

devColor.r = 0;
SetNewColor(theMesh, devColor);

如果您愿意,也可以将其作为扩展名

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);

推荐阅读