You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中所有LineRenderer颜色一致?期望两黄一蓝未实现

解决LineRenderer设置颜色后全部一致的问题

问题场景

在Unity项目中,为左眼、右眼和手指对象分别添加LineRenderer组件,调用SetUpLineRenderer方法为双眼设置Color.yellow,手指设置Color.blue,但运行后所有LineRenderer颜色完全相同,无法实现两黄一蓝的效果。

相关代码

初始化LineRenderer的代码:

// Initialize and set up the LineRenderers for the eyes and finger
leftEyeLineRenderer = eyeLeft.gameObject.AddComponent<LineRenderer>();
rightEyeLineRenderer = eyeRight.gameObject.AddComponent<LineRenderer>();
fingerLineRenderer = finger.gameObject.AddComponent<LineRenderer>();

SetUpLineRenderer(leftEyeLineRenderer, Color.yellow);
SetUpLineRenderer(rightEyeLineRenderer, Color.yellow);
SetUpLineRenderer(fingerLineRenderer, Color.blue);

设置LineRenderer的方法代码:

private void SetUpLineRenderer(LineRenderer lineRenderer, Color color)
{
    // Create a simple unlit material that supports vertex colors
    Material lineMaterial = new Material(Shader.Find("Standard"));
    lineRenderer.material = lineMaterial;

    lineRenderer.startColor = color;
    lineRenderer.endColor = color;
    lineRenderer.startWidth = 0.01f;
    lineRenderer.endWidth = 0.01f;
}

效果截图

所有LineRenderer颜色一致


问题原因

你使用的Standard Shader是为3D物体设计的,它不会直接读取LineRenderer的startColor和endColor属性,颜色会受场景光照、Shader默认参数影响,导致所有线条显示相同颜色。


修复方案

方案1:替换为支持LineRenderer颜色的Shader

将创建Material时的Shader改为专门支持2D/线条渲染的无光照Shader,比如Sprites/Default(内置管线)或Universal Render Pipeline/Unlit(URP管线),这类Shader会直接响应LineRenderer的颜色设置。

修改后的SetUpLineRenderer方法:

private void SetUpLineRenderer(LineRenderer lineRenderer, Color color)
{
    // 使用支持LineRenderer颜色的无光照Shader
    Material lineMaterial = new Material(Shader.Find("Sprites/Default"));
    lineRenderer.material = lineMaterial;

    lineRenderer.startColor = color;
    lineRenderer.endColor = color;
    lineRenderer.startWidth = 0.01f;
    lineRenderer.endWidth = 0.01f;
}

方案2:复用Material+MaterialPropertyBlock(性能更优)

多次创建Material会增加性能开销,推荐复用同一个Material实例,通过MaterialPropertyBlock动态修改颜色:

// 声明全局共享Material
private Material sharedLineMaterial;

void Awake()
{
    // 初始化共享Material,使用支持LineRenderer的Shader
    sharedLineMaterial = new Material(Shader.Find("Sprites/Default"));
}

private void SetUpLineRenderer(LineRenderer lineRenderer, Color color)
{
    lineRenderer.material = sharedLineMaterial;
    
    // 创建属性块,动态修改颜色
    MaterialPropertyBlock props = new MaterialPropertyBlock();
    lineRenderer.GetPropertyBlock(props);
    props.SetColor("_Color", color);
    lineRenderer.SetPropertyBlock(props);

    lineRenderer.startWidth = 0.01f;
    lineRenderer.endWidth = 0.01f;
}

效果说明

修改后,左眼和右眼的LineRenderer会显示黄色,手指的LineRenderer会显示蓝色,符合预期效果。

内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:43:16