Unity 中使用 UnityWebRequest 加载 StreamingAssets 文件夹中的图片

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、先检查【打包输出文件夹】(最重要!)
  • 二、完整代码(协程,RawImage,WebGL / 编辑器 / Windows 通用)
  • 总结

一、先检查【打包输出文件夹】(最重要!)

打开你 WebGL 打包出来的目录,看里面有没有:

打包输出文件夹 ├ StreamingAssets ✅ 这个文件夹必须存在! │ └ myimg.png ✅ 文件必须在这里!

二、完整代码(协程,RawImage,WebGL / 编辑器 / Windows 通用)

代码如下(示例):

using UnityEngine;using UnityEngine.UI;using UnityEngine.Networking;using System.Collections;using System.IO;public class LoadStreamingAssetsImg:MonoBehaviour{public RawImage rawImage;// 图片在StreamingAssets里面的相对路径string imgName="myimg.jpg";public Button button;privatevoidStart(){button.onClick.AddListener(()=>{AudioManager.Instance.PlayShoot(0);UICover.Instance.SetState(true);Destroy(this.gameObject);});StartCoroutine(LoadImg());}IEnumeratorLoadImg(){// WebGL下 streamingAssetsPath 是 http 地址开头,直接拼接string filePath=Path.Combine(Application.streamingAssetsPath,imgName);Debug.Log("加载地址:"+filePath);using(var req=UnityWebRequestTexture.GetTexture(filePath)){yieldreturnreq.SendWebRequest();if(req.result==UnityWebRequest.Result.Success){// 销毁旧贴图防内存泄漏if(rawImage.texture!=null){Destroy(rawImage.texture);}Texture2D tex=DownloadHandlerTexture.GetContent(req);rawImage.texture=tex;// rawImage.SetNativeSize();}else{Debug.LogError("加载失败:"+req.error+" | url:"+filePath);}}}}

如果是 Image(Sprite)版本
下面展示一些内联代码片。

Texture2D tex = DownloadHandlerTexture.GetContent(uwr); Sprite sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f)); GetComponent<Image>().sprite = sprite;

总结

Player Settings → WebGL →Compression Format = Disabled(本地测试首选;Gzip 需要服务器配置 MIME 头,本地测试容易 404)