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 =