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)