Version: 2020.1

Texture2D.PackTextures

切换到手册
public Rect[] PackTextures (Texture2D[] textures, int padding, int maximumAtlasSize, bool makeNoLongerReadable);

参数

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

返回

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

描述

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

该函数将使用由提供的纹理制作的图集替换当前纹理。 打包后,任何纹理的大小、格式和多级渐进纹理都可能发生更改。

生成的纹理图集的大小将满足所有输入纹理的需求, 但每个维度最多只能达到 /maximumAtlasSize/。如果无法将输入纹理全部装入所需大小的纹理图集, 则将输入纹理缩小后装入。

如果所有输入纹理都使用 DXT1 格式压缩,则图集将采用 DXT1 格式。 如果所有输入纹理都使用 DXT1DXT5 格式压缩, 则图集将采用 DXT5 格式。如果所有输入纹理都未压缩过, 则图集将采用 RGBA32 未压缩格式。

如果所有输入纹理都没有多级渐进纹理,则图集也没有多级渐进纹理。

如果使用非零填充、图集经过压缩并且具有多级渐进纹理,则由于压缩限制, 较低级别的多级渐进纹理可能与原始纹理中的不完全相同。

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