当使用图集 SpriteAtlas 时, 从中获取的 Sprite 的 texture 是图集中整张图片,为了给 RawImage 设置 Texture,有两种方式:
方式1:使用以下扩展函数,其原理是给 RawImage 设置整张纹理,然后设置 uvRect 使之只显示 Sprite 对应部分。这种方式的优点是,SpriteAtlas 不需要设置 read/write,从而不额外增加内存消耗
/// <summary>
/// 对RawImage组件,通过Sprite来设置其Texture (支持sprite是从图集中来的方式)
/// </summary>
public static void SetTextureBySprite(this RawImage rawImage, Sprite sprite)
{
rawImage.texture = sprite.texture; //这个texture是整个图集上的一大张Texture
float w = sprite.texture.width;
float h = sprite.texture.height;
rawImage.uvRect = new Rect(sprite.textureRect.x / w, sprite.textureRect.y / h, sprite.textureRect.width / w, sprite.textureRect.height / h);
}
方式2:新建一个Texture,从精灵中使用 GetPixels 的方式获取对应区域上的图像。这种方式需要图集设置 read/write,因此比较消耗内存
/// <summary>
/// 从精灵创建相应的纹理, 如果是单纹理的直接取,如果是图集的,则要求图集设置

文章介绍了在Unity中使用SpriteAtlas时,如何高效地为RawImage设置Texture的两种方法:一是通过扩展函数利用Sprite的整张Texture和uvRect,二是创建自定义Texture并从精灵获取像素。前者不增加内存消耗,后者可能因图集设置read/write而消耗更多内存。
最低0.47元/天 解锁文章
1944





