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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:27:09