ngui源码中关于图集(UIAtlas)一些有用的方法记录

本文详细介绍了NGUI源码中UIAtlas的相关方法,包括计算图集的打包率、获取图集中小图的方式、小图打包成大图的实现、图集指向替换以及对小图片列表的大小排序。内容涵盖了Unity中图集的管理和优化技巧。
摘要由CSDN通过智能技术生成

0. 说明:

texture表示图集使用的大图片, 例如:

这里写图片描述

sprite表示被打包进图集的小图片, 例如:

这里写图片描述

1. 计算一个图集中的texture打包率 / 使用率 / sprite入住率

在ngui内置的打包图集脚本UITexturePacker中, 有一个方法Occupancy, 可以用来计算图集中的sprite入住率

    /// Computes the ratio of used surface area.
    public float Occupancy()
    {
        ulong usedSurfaceArea = 0;
        for (int i = 0; i < usedRectangles.Count; ++i)
            usedSurfaceArea += (uint)usedRectangles[i].width * (uint)usedRectangles[i].height;

        return (float)usedSurfaceArea / (binWidth * binHeight);
    }

代码中的usedSurfaceArea是一张Texture中已经被占用的矩形的列表(public List<Rect> usedRectangles = new List<Rect>();), 通过遍历List中的矩形, 计算它们总面积, 再除以Texture的总面积, 就得到sprite的入住率.

注意, 计算一种图集的占有率, 要考虑的是一张张sprite所占的矩形而不是它的透明通道比率, 即使sprite内部是空的.

但是以上方法只能在使用UITexturePacker打包图集的时候才能知道一张texture的入住率, 如果图集是通过其它打包工具获得的呢?

可以在UIAtlas代码中mSprites保存的是该图集的保存的所有sprite信息List<UISpriteData> , UISpriteData的部分成员如下:

    public string name = "Sprite";
    public int x = 0;
    public int y = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值