首页 > Unity > NGUI > NGUI下RGB与Alpha通道分离支持
2016
08-30

NGUI下RGB与Alpha通道分离支持

Android下ETC1格式不支持Alpha通道,iOS下PVRTC格式对Alpha通道的支持也不够好,所以我们可以把Alpha通道单独分离出来。

之前一篇文章:http://www.maosongliang.com/archives/33 讲了如何用TexturePacker生成图集,现在需要改下texturepacker.rb来导出一张RGB888的png和一张Alpha8的png(经测试导出Alpha8时会发现sprite位置不匹配,用Alpha Intensity可以)

测试用的图片:

NGUI下RGB与Alpha通道分离支持 - 第1张  | Atlantis技术博客

运行Dogs.bat后可以得到一张RGB图集和一张Alpha8图集,里面的sprite位置完全一致:

NGUI下RGB与Alpha通道分离支持 - 第2张  | Atlantis技术博客

创建一个Editor脚本:TexturePostprocessor.cs

可以在生成的图集重新导入时自动设置图集的格式,RGB888的设成自动压缩(pc-dx1,ios-pvrtc4,android-etc1),Alpha8的设成Alpha8。

NGUI下RGB与Alpha通道分离支持 - 第3张  | Atlantis技术博客

RGB888

NGUI下RGB与Alpha通道分离支持 - 第4张  | Atlantis技术博客

Alpha8

另外新建图集材质的shader:

UI_RGB_A.shader

UI_RGB_A 1.shader

UI_RGB_A 2.shader

UI_RGB_A 3.shader

以上四个shader对应NGUI的Unlit – Transparent Colored.shader,Unlit – Transparent Colored 1.shader,Unlit – Transparent Colored 2.shader,Unlit – Transparent Colored 3.shader

新建材质Dog.mat并指定shader及参数

NGUI下RGB与Alpha通道分离支持 - 第5张  | Atlantis技术博客

然后新建图集prefab,所有文件如下:

NGUI下RGB与Alpha通道分离支持 - 第6张  | Atlantis技术博客

以上都完成后,选中一个创建好的图集prefab会发现Inspector窗口下的预览窗口以及Sprite选择窗口中看到的sprite都是没有alpha通道的,这是因为用于显示的texture是atlas.mainTexture,这个mainTexture就是那张RGB888的图集。我们可以在编辑器模式下动态生成一个rgba32的texture来替换它,rgb和alpha通道的值分别取自rgb888图集和alpha8图集。改动如下:

UIAtlas.cs

UIAtlasInspector.cs

SpriteSelector.cs

line 65

NGUITools.cs

效果就正常了:

NGUI下RGB与Alpha通道分离支持 - 第7张  | Atlantis技术博客    NGUI下RGB与Alpha通道分离支持 - 第8张  | Atlantis技术博客

另外UISprite的Inspector的预览窗口也需要改:

UISpriteInspector.cs

NGUI:3.8.2

Unity:4.6.4

 

最后编辑:
作者:maosongliang
这个作者貌似有点懒,什么都没有留下。