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

Unity C#使用Color32设置自定义颜色无效怎么解决

问题原因

立方体显示白色且无控制台报错,核心是颜色值类型不匹配、数值超范围导致的,常见触发场景有三个:

  • 最容易犯的疏漏:实际运行的代码里手滑把Color32写成了Color。两个结构的参数规则完全不同:Color构造函数接收的是0~1范围的浮点数,传入139这种远大于1的整数值时,RGB通道亮度会直接溢出,显示为纯白色;你之前用的Color.red是官方预设的合法值(1,0,0,1),所以运行正常。
  • 版本/管线兼容问题:Unity 2019及更早的老版本、URP/HDRP自定义管线下,直接给material.color(这个属性本身是Color类型)赋值Color32结构时,内置的隐式转换逻辑偶尔会失效,不会自动把0255的字节值映射到01的浮点范围,传入的数值异常就会显示白色。
  • HDR配置问题:如果项目开了HDR高动态范围,未做范围限制的Color32转Color时,也可能出现亮度溢出,显示为过曝的纯白色。
正确实现方案

三种写法任选其一即可,全版本兼容:

方案1:显式类型转换(最稳妥,推荐)

手动把Color32转成Color再赋值,从根源避免隐式转换失效的问题:

// 显式转换后,0-255的RGBA值会被正确映射到0-1的浮点区间
GetComponent<Renderer>().material.color = (Color)new Color32(139, 0, 0, 255);

方案2:直接用Color构造传值

不用Color32,手动把RGBA的0255值除以255转成01的浮点数,直接传给Color构造:

// 参数顺序为R、G、B、A,每个值范围0~1,暗红色R通道139/255≈0.545
GetComponent<Renderer>().material.color = new Color(139f/255f, 0f, 0f, 1f);

方案3:配置兼容排查

如果上面两种写法还是显示白色,去 Edit > Project Settings > Player > Other Settings > Color Space 检查配置:

  • 如果颜色空间选的是Linear,把材质的shader换成Standard或者对应管线的Lit shader,不要用老旧的Legacy内置shader,避免线性空间下颜色计算错误。
  • 如果开了HDR,赋值前手动把颜色通道值限制在0~1区间,避免亮度过曝。
排查小技巧

赋值前可以打日志看实际颜色值对不对,快速定位问题:

Color targetCol = (Color)new Color32(139, 0, 0, 255);
// 正常日志应该输出R≈0.545, G=0, B=0, A=1,如果输出R=139就是转换逻辑出问题了
Debug.Log($"当前颜色值 R:{targetCol.r} G:{targetCol.g} B:{targetCol.b} A:{targetCol.a}");
GetComponent<Renderer>().material.color = targetCol;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:24:20