今天项目中有个需求是,当奖牌没有获得的时候,变灰色,这个灰色不单单是改变原图片的颜色就行了,而是需要特定的shader进行颜色叠加才能实现。(很多游戏技能变灰应该也是这样做的)
当弄好shader做好材质之后,当需要变灰时执行下面方法
void SetGray()
{
Icon.color = Color.gray;
Icon.material = Material_Gray; //假设Material_Gray为变灰的材质球
}
这样设置之后,当代码一运行,所有ui界面全变灰了,并且就算重启运行项目,还是灰的,吓得我以为要把全部ui重新改一遍。
研究后发现相同材质的Image在创建后引用的是内存中同一份材质,所以改掉一个后,其实就是改掉了所有Image的默认材质,这个时候如果需要单独修改这个Image的材质,如使某些技能灰掉,那么就在创建实例时新建一份材质,之后修改这一份材质,导致的问题是这样内存中就会有多份材质存在,慎用。如下:
void SetGray()
{
Icon.color = Color.gray;
if (Material_Gray != null)
{
Material material = new Material(Material_Gray);
Icon.material = material;
}
}
over~