textures | 要打包到图集中的纹理数组。 |
padding | 打包纹理之间的像素填充。 |
maximumAtlasSize | 结果纹理的最大尺寸。 |
makeNoLongerReadable | 是否应将纹理标记为不再可读? |
Rect[] 包含图集中每个输入纹理的 UV 坐标的矩形数组,如果打包失败则返回 null。
将多个纹理打包到纹理图集中。
此函数将使用从提供的纹理创建的图集替换当前纹理。打包后,任何纹理的大小、格式和 mipmaps 都可能发生变化。
生成的纹理图集将根据需要大到足以容纳所有输入纹理,但在每个维度上最多为maximumAtlasSize
。如果输入纹理无法全部容纳到所需尺寸的纹理图集中,则它们将缩小以适合。
如果您已压缩所有输入纹理,并且满足以下条件,Unity 也会压缩输出图集
如果输入纹理已压缩并具有 mipmaps,则以下条件会导致图集作为未压缩纹理创建
如果任何输入图像具有 mipmaps 且填充值大于零,则图集纹理将为未压缩。这是由于压缩数据上的对齐限制。如果您没有压缩一个或多个输入纹理,则图集将保持未压缩格式RGBA32。如果纹理图集保持压缩并且填充值大于零,则填充值将四舍五入到下一个 4 的倍数。这是由于压缩数据上的对齐限制。
这是压缩格式的简短列表。您可以在TextureFormat中找到完整列表
但是,图集打包代码不支持每种压缩格式。在可用的格式中,图集打包代码仅支持以下格式:如果满足所有其他条件,并且输入纹理使用以下格式之一,则纹理图集将被压缩。
所有输入纹理必须具有相同的压缩格式或混合兼容的压缩格式,否则图集格式将回退为未压缩。
您可以将这些类型混合在图集中,它们将保持压缩状态
但是,如果输入纹理混合格式,例如 BC7 与 ASTC 4x4 或 DXT5,这会导致图集打包代码回退到RGBA32。
如果没有任何输入纹理具有 mipmaps,则图集也没有 mipmaps。
如果makeNoLongerReadable
为true
,则纹理将被标记为不再可读,并且在上传到 GPU 后将释放内存。默认情况下,makeNoLongerReadable
设置为false
。
using UnityEngine;
public class Example : MonoBehaviour { // Source textures. Texture2D[] atlasTextures;
// Rectangles for individual atlas textures. Rect[] rects;
void Start() { // Pack the individual textures into the smallest possible space, // while leaving a two pixel gap between their edges. Texture2D atlas = new Texture2D(8192, 8192); rects = atlas.PackTextures(atlasTextures, 2, 8192); } }