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

Unity中使用Resources.Load<>加载Sprite失败问题求助

问题:修改UI.Image源图像时Resources.Load失效的原因分析

我尝试通过脚本修改UI.Image的源图像,以下两种写法中,被注释的写法可正常运行,但直接调用Resources.Load<Sprite>()的写法无法生效。我已将纹理类型从Default修改为Sprite(2D and UI),但问题仍未解决,求解释原因。

//var tex = Resources.Load<Texture2D>("candy_110/candy1_green_01");
//GetComponent<Image>().sprite = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f));
GetComponent<Image>().sprite = Resources.Load<Sprite>("candy_110/candy1_green_01");

更新1:为确认Resources.Load未返回错误,附上资源布局与控制台截图:

  • 资源布局截图:资源布局截图
  • 控制台日志截图:控制台日志截图

解答

核心原因及解决办法:

  • Sprite Mode设置错误:即使纹理类型改成了Sprite(2D and UI),如果Sprite Mode设为Multiple或Polygon,Unity会把该资源处理成多Sprite集合,直接用Resources.Load<Sprite>()只会返回null。此时需要用Resources.LoadAll<Sprite>("路径")获取所有子Sprite,再选取目标Sprite:
    Sprite[] sprites = Resources.LoadAll<Sprite>("candy_110/candy1_green_01");
    if(sprites != null && sprites.Length > 0)
    {
        GetComponent<Image>().sprite = sprites[0];
    }
    
  • 路径匹配问题:确认Resources文件夹下的子目录结构完全匹配代码中的路径,注意大小写(打包后或跨平台环境下大小写敏感),路径里不要加文件后缀(比如不要写.png)。
  • 资源未正确放入Resources目录:检查资源是否确实在Assets/Resources目录下,子目录层级要和代码路径一致。如果资源在Resources外或被打包进AssetBundle,Resources.Load无法读取。
  • 资源导入异常:如果以上都没问题,右键资源选择Reimport重新导入,排查资源文件是否损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:05:12