我想改变每一行(元素)的颜色,就像在颜色切换。但我的代码不工作。我的代码有什么问题?
void Start()
{
lineGeneratorPrefab = new GameObject();
DrawLine();
}
private void DrawLine()
{
GameObject myLine = new GameObject();
myLine.transform.position = start;
myLine.AddComponent<LineRenderer>();
LineRenderer lr = myLine.GetComponent<LineRenderer>();
lr.positionCount = 4;
lr.SetPosition(0, new Vector3(-2, 0, 0));
lr.SetPosition(1, new Vector3(2, 0, 0));
lr.SetPosition(2, new Vector3(2, -2, 0));
lr.SetPosition(3, new Vector3(-2, -2, 0));
lr.materials[2].color = Color.blue;
lr.materials[3].color = Color.red;
}
3条答案
按热度按时间rxztt3cl1#
看看here。
您可以通过
colorGradient
属性更改线条呈现器的渐变,而不是更改各种材质。因此,在您的情况下,您可以添加以下内容:
如果需要更突然的过渡,可以在0.49和0.51处添加颜色关键帧。
42fyovps2#
谢谢你的回答KTobiasson!我确实移植了你的着色器来使用内置的渲染管道。代码只是稍微修改了一下,因为我需要线是透明的,并且在VR中正确渲染。
pxyaymoc3#
我也遇到过这个问题,无论你是否把渐变键设置得很紧,都会发生意想不到的颜色混合,除非你的LineRenderer分辨率真的很高。我的用例根本不需要混合(只是颜色之间的突然变化)。我通过创建一个着色器来解决这个问题,该着色器基于运行时设置的顶点颜色贴图/纹理来改变顶点颜色。
要使其工作,LineRenderer需要在Corner Vertices属性中至少设置一个。您还需要设置颜色发生变化的位置,但我使其易于与以下着色器、类和结构一起使用。
以下是着色器(未点亮且适用于URP):
只需将着色器放在材质上,并设置线条渲染器使用该材质。然后,您还需要静态LineRendererExtension类和LineRendererPositionParams结构体:
所以你只需要创建一个LineRendererPositionParams列表,其中包含LineRenderer的所有位置和颜色,然后使用扩展
lineRenderer.SetPositionsWithColors(positionParams);
,它返回一个颜色列表,你在另一个扩展lineRenderer.SetVertexColorMap(lineRenderer.SetPositionsWithColors(positionParams), texture);
上使用它,它应该能像预期的那样工作。