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
相关产品推荐
相关产品推荐

