首页 > Unity3D频道 > 【UGUI研究院】 > UGUI研究院之比较大的图片的压缩(二十四)
2017
03-24

UGUI研究院之比较大的图片的压缩(二十四)

好久没写文章了,最近太累了。。

使用UGUI开发界面,一般比较小的图片会设置一个tag,让它打进图集。其实还有很多大的图片,比如logo、头像、图标、关卡图、等 。 宽高各一方大于256 或者 512的图片。

这类大的图片不太适合放在图集中,因为他们会把图集撑的很大,可是如果从图集中拿出来,又没办法压缩。因为美术不可能刚好给我们出一个2的幂次方的图片。

UGUI中有两个方法可以让不是幂次方的图片变成2的幂次方

1.给每个大图片设置一个独一无二的tag,这样这张图片就会被当成一个图集来处理。 具体压缩的方法可以看我之前写的文章

Unity3D研究院之UGUI安卓自动ETC1通道分离(九十一)

2.不使用Image组件,改用RawImage

如下图所示,TextureType这里设置成Default ,Advanced里设置NonPower of 2 里面有4个选项,none、toNearest、toLarge、toSmall (设置比例的)推荐设置成toNearest。

注意:RawImage也可以设置Sprite或者Texture两种。如果觉得图片不清楚的话推荐使用方法1来压缩。

UGUI研究院之比较大的图片的压缩(二十四) - 雨松MOMO程序研究院 - 1

然后这张图片就变成了2的幂次方,它不能放在Image组件中,但是可以放在RawImage中。开始压缩图片吧,Android压缩成ETC IOS压缩成 PVRTC

这类大图片有几个特点

1、不需要合并批次(原因就是不想把图集撑的很大)

2、不需要九宫格

3、对比了一下Sprite和Texture的方式,发现Texture的加载速度要比Sprite快很多。

4、如果用RawImage就不能使用unity自带的Android ETC1 自动通道分离,如果你的游戏必须要支持ETC1的话,那么就给它设置一个tag变成图集即可

5.如果ETC2压缩方式放在了ETC1的手机上,Unity会自己转成RGBA32不用担心显示错误的问题。

6.美术就喜欢设计颜色渐变的图片,怎么压缩都无法消除抖动问题,效果都不好,所以还是要保留一些图片的压缩格式是RGBA32. 选择性压缩 ETC 和PVRTC

最后欢迎大家一起讨论。

7.最近发现RawImage不会用Sprite的Atlas 。 换句话来说,就算设置了Sprite的tag.放在RawImage上 无效。。。坑啊 

UI还是老老实实用Image吧。。。

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

UGUI研究院之比较大的图片的压缩(二十四)》有 2 条评论

  1. 你猜 说:

    2的冥次方是为了ios开发吧。这样的话最快的方法就是不开发ios版本。

  2. 牛肉干 说:

    先把图片弄成Default, toNearest 然后转成sprite可以吗
    public class spriteCreate : MonoBehaviour
    {
    public Texture2D tex;
    private Sprite mySprite;
    private SpriteRenderer sr;

    void Awake()
    {
    sr = gameObject.AddComponent() as SpriteRenderer;
    sr.color = new Color(0.9f, 0.9f, 0.9f, 1.0f);

    transform.position = new Vector3(1.5f, 1.5f, 0.0f);
    }

    void Start()
    {
    mySprite = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f);
    }

    void OnGUI()
    {
    if (GUI.Button(new Rect(10, 10, 100, 30), “Add sprite”))
    {
    sr.sprite = mySprite;
    }
    }
    }

留下一个回复

你的email不会被公开。