c# - 如何使 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;
解决方案
Color
是struct
(值类型)而不是引用。
当你设置
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);