Unity Addressables:构建版本中纹理内精灵无法加载问题(2022.03.20f1)
解决Unity Addressables构建后加载Sprite[]为空的问题
核心原因
当纹理设置为Sprite (2D and UI)并切割出多个精灵时,Addressables默认构建逻辑可能未将这些精灵子资源纳入寻址系统,导致构建后无法通过原路径加载到Sprite[]数组,但原纹理本身可正常加载。
解决方案
1. 开启Addressables的子资源包含设置
- 选中目标纹理所在的Addressables组,打开Advanced Settings面板
- 勾选Include Sub Assets选项;若为单个纹理资源,也可直接在该资源的Addressables Inspector面板中开启此开关
2. 通过Texture2D提取精灵(备选方案)
如果上述设置无效,可先加载纹理对象,再从中提取精灵:
public async void LoadSprite(string spritePath) { AsyncOperationHandle<Texture2D> textureHandle = Addressables.LoadAssetAsync<Texture2D>(spritePath); await textureHandle.Task; if (textureHandle.Status == AsyncOperationStatus.Succeeded) { Texture2D texture = textureHandle.Result; // 从纹理中获取所有已切割的精灵 Sprite[] sprites = SpriteUtility.GetSprites(texture); // 后续业务逻辑... } }
注意:使用此方法需确保纹理的Sprite模式为Multiple,且已完成精灵切割操作
3. 为单个精灵设置独立寻址路径
若仅需加载特定精灵,可在Sprite编辑器中选中目标精灵,在Inspector面板为其设置独立的Addressables路径,之后直接加载单个Sprite:
public async void LoadSingleSprite(string singleSpritePath) { AsyncOperationHandle<Sprite> spriteHandle = Addressables.LoadAssetAsync<Sprite>(singleSpritePath); await spriteHandle.Task; if (spriteHandle.Status == AsyncOperationStatus.Succeeded) { Sprite targetSprite = spriteHandle.Result; // 后续业务逻辑... } }
4. 验证构建资源包
- 打开Addressables的Build Report,检查目标纹理的子资源(精灵)是否被正确打包
- 使用Addressables的Profile Analyzer确认精灵资源存在于构建后的包内
内容的提问来源于stack exchange,提问作者Benny
相关产品推荐
相关产品推荐

