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

Unity脚本修改Tilemap全局颜色属性不生效问题求助

Unity Tilemap 全局颜色设置不生效解决方案

核心问题原因

你遇到的固定被赋值为(191, 191, 191, 255)的问题,本质是Unity颜色类型使用错误导致的:

  • Unity的Color结构体所有参数取值范围是0~1的浮点数,直接传入0~255的整数值时,超过1的部分会被截断为1,最终得到错误的色值
  • (191, 191, 191, 255)换算为Color类型的浮点值是(0.75f, 0.75f, 0.75f, 1f),也就是Color.grey,说明你代码里的颜色变量赋值逻辑有误

修复方案

1. 修正颜色变量赋值方式

两种正确的赋值方案二选一即可:

  • 方案1:使用Color类型时,所有参数除以255f转换为0~1范围
// 示例:透明度50的白色
Color nearlyTransparent = new Color(255/255f, 255/255f, 255/255f, 50/255f);
// 示例:半透黑色
Color blackedOutColor = new Color(0, 0, 0, 150/255f);
// 示例:默认原色
Color defaultColor = Color.white;
  • 方案2:直接使用Color32类型,原生支持0~255的整数值赋值,无需转换,可直接赋值给Tilemap的color属性(自动隐式转换)
Color32 nearlyTransparent = new Color32(255, 255, 255, 50);
Color32 blackedOutColor = new Color32(0, 0, 0, 150);
Color32 defaultColor = new Color32(255, 255, 255, 255);

2. 排查其他逻辑冲突

如果修正颜色赋值后仍有问题,按以下步骤排查:

  • 确认floorChildren数组初始化逻辑正确:建议初始化时直接存储所有子对象的Tilemap组件数组,避免每次循环调用GetComponent取组件,减少出错概率
// 初始化示例:在Start中提前获取所有子Tilemap
private Tilemap[] floorTilemaps;
void Start()
{
    floorTilemaps = GetComponentsInChildren<Tilemap>();
}
  • 右键点击Inspector中Tilemap组件的Color属性,选择Find References In Scene,排查是否有其他脚本在Awake/Start等生命周期中修改了Tilemap的颜色值
  • 在颜色赋值代码后增加调试日志,确认赋值前后的色值是否符合预期
var targetTilemap = floorTilemaps[i];
targetTilemap.color = nearlyTransparent;
Debug.Log($"目标色值:{nearlyTransparent},实际赋值后色值:{targetTilemap.color}", targetTilemap.gameObject);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:45:05