转载

NGUI 灰化图标 按钮——不增加drawcall

在游戏中某些地方可能需要对按钮进行灰化显示,从而表示不能点击!在网上找了一下有些方法是直接用UITexture+灰化shader去做这件事,但是每加1个UITexture就会多1个drawcall!另外有些方案写的不太清楚,看不懂!不过也基本都是要使用灰化shader,不可能说每有一个需要灰化地方的图片就让美术出多一张对应的灰化资源图,这样太浪费空间了。

我的解决方法是这样的:

0.需要一个灰化效果的shader,具体直接网上搜索找一下相关的shader代码就可以了!

1.使用atlas maker制作生成了图集common_atlas(包括生成了贴图图集common_atlas.png、预设体common_atlas.prefab、材质common_atlas.mat这三个文件)

2.复制了图集预设体、图集材质,姑且命名为gray_common_atlas.prefab, gray_common_atlas.mat,然后 将材质文件gray_common_atlas.mat默认的shader指定为前面选好的灰化shader,这样使用这个灰化prefab的sprite就都是灰化效果

3.在运行中,一旦某个按钮或者图标sprite(它们的atlas是指定为正常的common_atlas.prefab)需要灰化,这个时候就 动态的将Sprite.atlas设置为gray_common_atlas.prefab ,需要设置正常状态的时候,就反过来设置为正常的common_atlas.prefab。

4.当然了,由于sprite的atlas属性你不好去new一个,所以我是在布局阶段,每有一个图集就新建1个sprite,然后选择对应的图集atlas,然后将这个sprite放在一个单体类AllAtlas中,一旦某个按钮或图标的sprite需要动态设置指定的atlas属性,就将AllAtlas中对应的sprite.atlas赋值给它。

比如AwardSprite.atlas = AllAtlas.Instance.CommonSprite.atlas,这样就设置了想要的atlas!

现在这个是目前想到的灰化按钮的最好用法,有更好的或者有错误互相交流下,谢谢,转载请注明出处!

正文到此结束
Loading...