网上已经有类似的解决方案,原理就是在做一张通道图,然后在shader里混合。代价就是需要做个shader在做一个脚本代替Image 和RawImage。
今天我发现其实unity自己已经做了这个功能了,不用写shader,也不用替换脚本,原生支持就是方便啊。
先看看我的图集,ETC1 压缩格式
1.升级你的unity到5.5(有可能unity5.4也可以)
2.Sprite必须设置Packing Tag(只有图集才支持)
3.设置所有UI贴图的格式为ETC1(无论透明还是不透明)
4.如下图所示,勾选Compress using ETC1(split alpha channel) (可以写个工具自动批量修改)
5.搞定
测试机器是小米pad1,先看看真机上的效果。
今天我还发现了另外一个问题,在某些android机器上可能会显示成这样。
我第一反应这肯定是unity的bug,我想办法解决了一下。
下载unity5.5的内置shader。有一个叫UI-DefaultETC1的shader拖入工程,在ProjectSetting->GraphicsSettings里添加进去。
真机Profiler下,很清楚的看见透明图已经被unity分离了。
大家请在看上面的安卓真机Profiler的图。Unity把一张1024X1024的图拆分成 0.5M大小 和1M大小 的两张图, 0.5M 就是ETC1的压缩图, 另外一个1M 我猜就是对应 Alpha 8 格式。 这样就算图片有的透明渐变的效果也会是很好的。 强烈建议大家使用啊~ 如果是1024大小 这样从truecolor的4M减少到现在1.5M 效果还是很可观的。
批量自动设置etc1 + alpha脚本,注意第二个参数传入true就可以
textureImporter.SetPlatformTextureSettings(“Android”,2048,TextureImporterFormat.ETC_RGB4,true);
大家赶紧测试吧。。 有问题欢迎在下面给我留言哈。。
- 本文固定链接: https://www.xuanyusong.com/archives/4279
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
贴图的类型是不是必须要设置为精灵图片才可以啊??如果不是UI是不是就不行了
现在只有UI可以用,如果不是UI就得自己实现了
为什么我自动打包的ETC1的alpha图不是alpha8格式而是etc1格式,大佬有什么办法么
请问一下,Unity接入第三方SDK,弹出控件无法显示,但可以点击触摸。是哪里的问题
想问下,假设我直接使用ETC2的话,用profile看内存是0.6M的一张图集。然后换成ETC+Aplha 就变成了两张0.6M的图。内存不是反而增加了么。而且虽然说到ETC2只有OpenGL3.0的设备支持,那这个市场占用率又是多少,不使用ETC2是否值得。
2013年以后的手机基本都支持 opengl es3.0 如果不考虑 2.0就直接用etc2吧。
自己写的material,设定给image, 怎么做到自动切换PC端和ANDROID对于的shader?一个是单张文理,一个是ETC1通道分离
大佬,能不能给个NGUI的方案,,,
为啥我测试出来显示的都一样?5.6.2p3
mono 大神 能不能开一个专题讲讲如何写shader 和 分别在不同平台下面的处理~
请问 一个设置了packingtag 一个没有 为啥设置了 tag的没有透明 而没有设置的透明了我unity是5.3.4 只是没有那个shader
用etc2挺好的
mono大神,我用Unity 5.5 导入工程的时候,纹理读取速度很慢,尤其是第一次导入,很慢,不知道是不是正常现象啊
哦哦,怪不得后面就快好多 我用了git… 这个压缩信息可以保留吗? 切换分支的时候也想很快导入,可行吗?
大神,为什么不直接采用ETC2呢?现在的手机设备Android4.4以上占有率非常高啊
有个问题很疑惑,我们在测试中遇到的手机基本都在android4.4以及以上,那是不是可以考虑直接使用ETC2压缩纹理呢?
每次unity3D导出iOS项目后,都要配置好多SDK, 请问雨松大神有没有方法可以提前在Xcode中配置好这些东西,然后每次导出直接buildAndRun
android是可以提前配置好的,但iOS能够提前配置好吗
ios 的话 可以用 UnityEditor.iOS.Xcode.PBXProject
很棒!之前版本总是有些小问题,这下官方自己解决了。
试试吧。 但是我感觉还是会有坑。。。
坑总是伴随着升级,不断减少并增加。
请问MOMO ios平台有相应的分离alpha图的UGUI解决方案么?之前的NGUI是分离rgb图和alpha图达到节省资源的目的现版本的Ugui有解决方案么?或者能提供个扩展思路吗? O(∩_∩)O谢谢~
ios 有, 就是以前的思路 分两张图 写个脚本, 把信息传到 shader 里。
谢谢啦 已经搞定 其实和以前完全一样~想复杂了
看了下Unity5.4.3已经有这个功能啦, 感谢雨松大大分享, 还有我想请问雨松大大, 现在游戏图集一般都是用1024 * 1024吗, 那种大背景的图片怎么办
大背景图推荐不打图集。。
但大背景一般又不是2的幂次方且正方形, 在iOS下无法被压缩, 然后这种资源多了, 会导致iOS包安装后的体积变大的怎么办呀