You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何从Sprite Atlas获取单个Sprite的独立Texture2D?

如何从Sprite Atlas中获取对应Sprite的原始独立Texture2D?

我将多个带有独立Texture2D文件的Sprite(blue、green、red)打包进了Sprite Atlas,但通过以下代码获取到的是整张贴图集的Texture2D,而非blue对应的原始独立Texture2D:

Sprite blueSprite = Resources.Load<Sprite>("blue");
Texture2D blueTexture = blueSprite.texture; // 返回的是包含所有Sprite的图集纹理

解决方法:

  • 直接加载原始Texture2D
    如果原始的blue Texture2D文件仍保留在项目中(且未被设置为仅用于图集打包、仍可被Resources/Addressables访问),可以直接加载该Texture2D,无需通过Sprite:

    Texture2D blueOriginalTexture = Resources.Load<Texture2D>("blue");
    

    注意:若Sprite Atlas设置中启用了Remove Unused Sprite Assets,或构建项目时原始资源被剥离,此方法可能失效。

  • 从图集纹理中裁剪生成独立Texture2D
    若原始Texture2D无法直接访问,可从Sprite对应的图集纹理区域裁剪出对应内容,生成新的Texture2D:

    Sprite blueSprite = Resources.Load<Sprite>("blue");
    Texture2D atlasTexture = blueSprite.texture;
    
    // 创建与Sprite尺寸一致的新纹理
    Texture2D croppedTexture = new Texture2D((int)blueSprite.rect.width, (int)blueSprite.rect.height, atlasTexture.format, false);
    croppedTexture.wrapMode = TextureWrapMode.Clamp;
    
    // 使用RenderTexture裁剪对应区域
    RenderTexture tempRT = RenderTexture.GetTemporary(croppedTexture.width, croppedTexture.height);
    Vector2 scale = new Vector2(blueSprite.rect.width / atlasTexture.width, blueSprite.rect.height / atlasTexture.height);
    Vector2 offset = new Vector2(blueSprite.rect.x / atlasTexture.width, blueSprite.rect.y / atlasTexture.height);
    Graphics.Blit(atlasTexture, tempRT, scale, offset);
    
    // 读取像素并应用
    RenderTexture.active = tempRT;
    croppedTexture.ReadPixels(new Rect(0, 0, tempRT.width, tempRT.height), 0, 0);
    croppedTexture.Apply();
    
    // 释放临时资源
    RenderTexture.ReleaseTemporary(tempRT);
    RenderTexture.active = null;
    
    // croppedTexture即为对应blue的独立纹理
    

注意:本问题与查找Sprite Atlas中的Sprite不同,核心需求是获取原始独立Texture2D而非Sprite对象。

内容的提问来源于stack exchange,提问作者Robin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 05:27:26