Unity的UGUI中使用ETC1+Alpha的格式
2017-01-04 01:14
381 查看
转自:http://blog.csdn.net/langresser_king/article/details/52759899
Unity5.3之后,Android平台的默认压缩纹理改为ETC2。ETC2支持半透明,使用也很方便,不过问题是尚未普及,尤其是低端机是不支持ETC2的。Unity对不支持ETC2的机子,在加载图片的时候会解压为RGBA,不过这样就会造成极大的内存浪费,也会严重影响加载速度。
对于没有透明色且为2的整次幂的正方形图片,Unity会转为ETC1,所以模型的纹理是可以用默认的压缩格式。
需要注意的是非2的整次幂的图片,以及含有半透明的图片。这里主要是UI图片资源。
Unity提供了ETC1+Alpha的支持。在图片分页进行如图所示的设置
也可以通过代码进行自动化设置
[csharp] view
plain copy
private static void SetTextureSprite(AssetImporter ai, string tag = null)
{
TextureImporter importer = ai as TextureImporter;
if (importer == null) return;
importer.textureType = TextureImporterType.Sprite;
importer.mipmapEnabled = false;
importer.isReadable = false;
if (tag != null)
{
tag = tag.Replace(GameConfig.AB_EXT, "");
tag = tag.ToLower();
importer.spritePackingTag = tag;
}
#if UNITY_ANDROID
int maxSize = 1024;
TextureImporterFormat format = TextureImporterFormat.AutomaticCompressed;
int quality = 50;
importer.GetPlatformTextureSettings("Android", out maxSize, out format, out quality);
// 压缩的格式,android下修改为分离alpha通道的etc1
if (format == TextureImporterFormat.AutomaticCompressed)
{
importer.SetPlatformTextureSettings("Android", maxSize, TextureImporterFormat.ETC_RGB4, quality, true);
importer.SetAllowsAlphaSplitting(true);
}
#else
// iPhone
#endif
}
这里要注意几点:
1、图片必须设置好Sprite Tag,即进行图集打包,才能支持ETC1+Alpha。
2、BuildSetting里面 Texture Compression要选成 ETC(default)。如果选成其他的,则会使用ETC2,这样在低端机可以显示,但是效率很低。
3、Project Setting--Graphic--Always Included Shaders里面添加 UI/DefaultETC1。如果没有添加则真机上显示异常。
4、Unity5.3.0以及之前的版本,UGUI的Image是不支持ETC1的,只有SpriteRender渲染正常。 最新版本是没问题的。
5、如果自己写了某些自定义Shader,如图片灰化,那么这个也要做相应的支持。否则渲染不正常。具体支持方式参考UI/DefaultETC1
Unity5.3之后,Android平台的默认压缩纹理改为ETC2。ETC2支持半透明,使用也很方便,不过问题是尚未普及,尤其是低端机是不支持ETC2的。Unity对不支持ETC2的机子,在加载图片的时候会解压为RGBA,不过这样就会造成极大的内存浪费,也会严重影响加载速度。
对于没有透明色且为2的整次幂的正方形图片,Unity会转为ETC1,所以模型的纹理是可以用默认的压缩格式。
需要注意的是非2的整次幂的图片,以及含有半透明的图片。这里主要是UI图片资源。
Unity提供了ETC1+Alpha的支持。在图片分页进行如图所示的设置
也可以通过代码进行自动化设置
[csharp] view
plain copy
private static void SetTextureSprite(AssetImporter ai, string tag = null)
{
TextureImporter importer = ai as TextureImporter;
if (importer == null) return;
importer.textureType = TextureImporterType.Sprite;
importer.mipmapEnabled = false;
importer.isReadable = false;
if (tag != null)
{
tag = tag.Replace(GameConfig.AB_EXT, "");
tag = tag.ToLower();
importer.spritePackingTag = tag;
}
#if UNITY_ANDROID
int maxSize = 1024;
TextureImporterFormat format = TextureImporterFormat.AutomaticCompressed;
int quality = 50;
importer.GetPlatformTextureSettings("Android", out maxSize, out format, out quality);
// 压缩的格式,android下修改为分离alpha通道的etc1
if (format == TextureImporterFormat.AutomaticCompressed)
{
importer.SetPlatformTextureSettings("Android", maxSize, TextureImporterFormat.ETC_RGB4, quality, true);
importer.SetAllowsAlphaSplitting(true);
}
#else
// iPhone
#endif
}
这里要注意几点:
1、图片必须设置好Sprite Tag,即进行图集打包,才能支持ETC1+Alpha。
2、BuildSetting里面 Texture Compression要选成 ETC(default)。如果选成其他的,则会使用ETC2,这样在低端机可以显示,但是效率很低。
3、Project Setting--Graphic--Always Included Shaders里面添加 UI/DefaultETC1。如果没有添加则真机上显示异常。
4、Unity5.3.0以及之前的版本,UGUI的Image是不支持ETC1的,只有SpriteRender渲染正常。 最新版本是没问题的。
5、如果自己写了某些自定义Shader,如图片灰化,那么这个也要做相应的支持。否则渲染不正常。具体支持方式参考UI/DefaultETC1
相关文章推荐
- Unity的UGUI中使用ETC1+Alpha的格式
- Unity的UGUI中使用ETC1+Alpha的格式
- Unity中使用UGUI与ScrollView的练习
- <Unity UGUI><EasyTouch> 使用EasyTouch, 摇杆在Dynamic模式下,点击UI控件也会弹出的问题解决
- unity使用UGUI创建摇杆
- Unity中使用UGUI与ScrollView的练习
- unity 使用UGUI创建图集
- Unity 4.6的使用匿名delegate处理uGUI控件事件绑定
- unity使用ugui自制调色面板
- [Unity优化]UGUI图集的使用
- Unity中UGUI的部分控件的使用
- Unity5.3+ 在UGUI 上使用 粒子特效
- 【Unity】UGUI 如何使用CustomFont(自定义字体)
- Unity 5.2.1 UGUI 控件使用
- Unity的UGUI中使用CustomFont(BMFont)
- unity使用UGUI创建摇杆
- <Unity UGUI>使用c#反射实现UGUI文本显示的国际化
- Unity中2D和UGUI图集的理解与使用
- Unity GUI(uGUI)使用心得与性能总结
- Unity 使用UGUI创建可重用TableView