版本: Unity 6 (6000.0)
语言English
  • C#

Texture2D.PackTextures

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public Rect[] PackTextures(Texture2D[] textures, int padding, int maximumAtlasSize, bool makeNoLongerReadable);

参数

textures 要打包到图集中的纹理数组。
padding 打包纹理之间的像素填充。
maximumAtlasSize 结果纹理的最大尺寸。
makeNoLongerReadable 是否应将纹理标记为不再可读?

返回值

Rect[] 包含图集中每个输入纹理的 UV 坐标的矩形数组,如果打包失败则返回 null。

描述

将多个纹理打包到纹理图集中。

此函数将使用从提供的纹理创建的图集替换当前纹理。打包后,任何纹理的大小、格式和 mipmaps 都可能发生变化。

生成的纹理图集将根据需要大到足以容纳所有输入纹理,但在每个维度上最多为maximumAtlasSize。如果输入纹理无法全部容纳到所需尺寸的纹理图集中,则它们将缩小以适合。

如果您已压缩所有输入纹理,并且满足以下条件,Unity 也会压缩输出图集

如果输入纹理已压缩并具有 mipmaps,则以下条件会导致图集作为未压缩纹理创建

  • 如果输入纹理已压缩,但有些具有 mipmaps 而另一些没有,图集格式将回退为未压缩。
  • 如果已压缩的输入纹理具有 mipmaps 且填充 > 0,图集格式将回退为未压缩。

如果任何输入图像具有 mipmaps 且填充值大于零,则图集纹理将为未压缩。这是由于压缩数据上的对齐限制。如果您没有压缩一个或多个输入纹理,则图集将保持未压缩格式RGBA32。如果纹理图集保持压缩并且填充值大于零,则填充值将四舍五入到下一个 4 的倍数。这是由于压缩数据上的对齐限制。

这是压缩格式的简短列表。您可以在TextureFormat中找到完整列表

  • ETC
  • ETC2
  • EAC
  • DXT
  • ASTC
  • PVRTC

但是,图集打包代码不支持每种压缩格式。在可用的格式中,图集打包代码仅支持以下格式:如果满足所有其他条件,并且输入纹理使用以下格式之一,则纹理图集将被压缩。

  • ARGB4444
  • ETC
  • ETC2
  • DXT1
  • DXT5
  • BC7
  • ASTC 4x4

所有输入纹理必须具有相同的压缩格式或混合兼容的压缩格式,否则图集格式将回退为未压缩。

您可以将这些类型混合在图集中,它们将保持压缩状态

但是,如果输入纹理混合格式,例如 BC7 与 ASTC 4x4 或 DXT5,这会导致图集打包代码回退到RGBA32

如果没有任何输入纹理具有 mipmaps,则图集也没有 mipmaps。

如果makeNoLongerReadabletrue,则纹理将被标记为不再可读,并且在上传到 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); } }