c# - 在脚本中操作 Tilemap 颜色组件
问题描述
因此,我正在尝试制作一个脚本来更改某些瓷砖地图的颜色和透明度,以显示我正在查看的结构的楼层。本质上,我下方的地板看起来更暗,上方的地板大多是透明的,我正在查看的地板是默认颜色。我想一次更改瓷砖地图上每个瓷砖的颜色。通过让实际的瓷砖地图成为该楼层网格的子对象,我可以更改子对象上的瓷砖地图的颜色,就像这样
if (activeFloor == thisFloor)
{
isActiveFloor = true;
for (int i = 0; i < this.transform.childCount; i++)
{
floorChildren[i].GetComponent<TilemapRenderer>().sortingOrder = 2 + i;
floorChildren[i].GetComponent<Tilemap>().color = defaultColor;
}
}
else
{
isActiveFloor = false;
for (int i = 0; i < this.transform.childCount; i++)
{
floorChildren[i].GetComponent<TilemapRenderer>().sortingOrder = -2 + i;
if(thisFloor>activeFloor)
{
floorChildren[i].GetComponent<Tilemap>().color = nearlyTransparent;
}
else
{
floorChildren[i].GetComponent<Tilemap>().color = blackedOutColor;
}
}
}
不幸的是,这似乎没有多大作用。它确实改变了排序顺序,所以活动层将在前面,但是如果没有对上下楼层进行一些颜色校正,它看起来很奇怪。我知道 SetColor 存在,但是从统一文档看来它只影响一个图块,这意味着我必须制作一个荒谬的 for 循环或其他东西才能做到这一点,而只是让 ().color 改变会更容易.
编辑:所以我发现了一些有趣的东西。在 tilemap 上,当我进入播放模式时,它总是将 tilemap 的颜色设置为 (191, 191, 191, 255)。这不是它应该设置的颜色,并且此脚本中的颜色值都不是该值。即使在检查器中设置它的颜色,它仍然会将其更改为该值。我可以在检查器的播放模式下将其设置为正确的颜色,但是按下一个更改地板的按钮(意味着上面的代码将再次运行),将始终将其设置回该颜色值。这里的代码正在改变一些东西,我只是不确定为什么它将它设置为这个特定的值。
解决方案
好的,所以出于某种原因,像这样设置颜色
private Color defaultColor = new Color(255, 255, 255, 255);
private Color blackedOutColor = new Color(30, 30, 30, 255);
private Color nearlyTransparent = new Color(255, 255, 255, 50);
不起作用。这是因为当使用new Color(r,g,b,a); 该值实际上应该设置在 0 和 1 之间,因此 0 是颜色可以具有的最小值,而 1 是最大值,表示它的 255。您可以使用浮点数设置介于 0 和 1 之间的数字,所以
private Color defaultColor = new Color(30,30,30,255)
实际上应该设置为
private Color defaultColor = new Color(0.13f,0.13f,0.13f,1);
推荐阅读
- flutter - 将视频捕获到画布颤动
- mongodb - 初始化脚本不在 mongo 容器启动时运行
- azure-devops - 从本地 Azure Artifacts 下载通用包
- css - CSS 两个背景图片不适合移动设备
- flutter - Bottom overflowed by 182 pixels
- python - python将字符串转换为日期时间
- python - Selenium 驱动的 ChromeDriver 找不到 Chrome 二进制文件
- c# - 当我使用依赖项时 Azure Function 停止工作,在本地工作
- javascript - 堆栈导航和连接
- css - 向下拉菜单 CF7 添加箭头