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
相关产品推荐
相关产品推荐

