我用一个由六个三角形组成的网格来画一个六边形。统一网格保存顶点的颜色。颜色是统一引擎的颜色。
我希望我的颜色像指针一样工作。所以我只改变了变量,所有的顶点都更新了。但这不管用。六角是白色(1f,1f,1f)而不是青色(0f,1f,1f)。
出于性能原因,我想用一个笨重的机械师。
如果你有解决办法,请告诉我。:)
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;发布于 2020-08-31 12:18:57
Color是一个struct (值类型),而不是引用。
当你设置
meshVertexColor[0] = devColor;它是通过值传递的,因此您实际上存储了一个副本 of 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);https://stackoverflow.com/questions/63669065
复制相似问题