Unity LineRenderer自定义颜色、Gradient渐变及透明度不生效问题
核心问题原因
Unity 中 Color 类的构造函数接收的 RGBA 四个参数均为 0~1 区间的浮点数,而非你传入的 0~255 区间的整数值。当你传入大于1的整数时,Unity 会自动把数值截断为 1,所以会出现以下现象:
new Color(172, 242, 245, 255)四个参数全部大于1,被截断为(1,1,1,1),也就是纯白色new Color(255, 0, 0, 70)前三个参数中 R 为255被截断为1,G/B为0,所以颜色显示为红色,alpha值70被截断为1,透明效果完全不生效- 系统内置的
Color.green这类属性本身已经是0~1区间的正确赋值,所以不会出问题 - 用 Gradient 设置时所有自定义颜色都被截断为接近白色的数值,所以整条线显示为白色
解决方法
有两种修正方案:
- 将你使用的0255区间的数值统一除以255f,转换为01区间的浮点数再传给
Color构造函数 - 直接使用
Color32类,它的构造函数原生支持0~255区间的整数值参数,使用起来更方便
补充注意:如果调整alpha后还是没有透明效果,请确认你赋值给LineRenderer的
lineMaterial已经开启了透明渲染,比如材质使用带透明通道的Shader,且渲染模式设置为透明相关选项。
修正后的代码示例
方案1:Color 构造函数做数值转换
private void AddLineRendererColors(LineRenderer renderer) { renderer.material = lineMaterial; renderer.useWorldSpace = true; // 所有0-255数值除以255f转换为0-1区间 renderer.startColor = new Color(172/255f, 242/255f, 245/255f, 255/255f); renderer.endColor = new Color(255/255f, 0/255f, 0/255f, 70/255f); }
Gradient 写法同理:
Gradient gradient = new Gradient(); GradientColorKey startGradient = new GradientColorKey(new Color(172/255f, 242/255f, 245/255f, 255/255f), 0); GradientColorKey endGradient = new GradientColorKey(new Color(255/255f, 0, 0, 70/255f), 1); gradient.colorKeys = new GradientColorKey[] { startGradient, endGradient }; renderer.colorGradient = gradient;
方案2:直接使用Color32
private void AddLineRendererColors(LineRenderer renderer) { renderer.material = lineMaterial; renderer.useWorldSpace = true; // Color32原生支持0-255的int参数 renderer.startColor = new Color32(172, 242, 245, 255); renderer.endColor = new Color32(255, 0, 0, 70); }
Gradient 写法同理,把Color替换为Color32即可:
Gradient gradient = new Gradient(); GradientColorKey startGradient = new GradientColorKey(new Color32(172, 242, 245, 255), 0); GradientColorKey endGradient = new GradientColorKey(new Color32(255, 0, 0, 70), 1); gradient.colorKeys = new GradientColorKey[] { startGradient, endGradient }; renderer.colorGradient = gradient;
内容的提问来源于stack exchange,提问作者P-ratt
相关产品推荐
相关产品推荐

