一、可写区资源管理器主要作用
只读区资源管理器设计的主要目的就是以流的方式读取出只读区的资源。调用上层的callback函数,传出字节流数组给调用层。代码在设计上区分开了只读区和可写区的资源管理模块,因为这样符合职责单一的原则。这个比较简单没什么就是两个函数。
二、代码设计
读取AssetBundle
功能:读取只读区的资源包,这个只是个外壳函数,真正做事的是下面一个
public void ReadAssetBundle(string fileUrl, BaseAction<byte[]> onComplete) { YouYou.GameEntry.Instance.StartCoroutine(ReadStreamingAsset(fileUrl,onComplete)); }
读取资源
功能:使用UnityWebRequest 加载只读区的资源
private IEnumerator ReadStreamingAsset(string url,BaseAction<byte[]>onComplete) { //使用只读区目录+相对目录 拼接出来一个绝对目录 string strFullUrl = Path.Combine(Application.streamingAssetsPath,url); //对比url 和 uri:https://blog.csdn.net/sunjintaoxxx/article/details/120261843 //new 一个 Uri(统一资源标示符) Uri uri = new System.Uri(strFullUrl); //AbsoluteUri是啥意思啊?自盘中的路径吗? using (UnityWebRequest request = UnityWebRequest.Get(uri.AbsoluteUri)) { //收到回应才继续走下一步 yield return request.SendWebRequest(); //网络错误 或者会 http访问错误 if (request.isNetworkError || request.isHttpError) { onComplete?.Invoke(null); } else { //http request内部的下载器里的数据,赋值给回调函数 onComplete?.Invoke(request.downloadHandler.data); } } }
完整代码
//只读区资源管理器 public class StreamingAssetsManager { private IEnumerator ReadStreamingAsset(string url,BaseAction<byte[]>onComplete) { string strFullUrl = Path.Combine(Application.streamingAssetsPath,url); Uri uri = new System.Uri(strFullUrl); using (UnityWebRequest request = UnityWebRequest.Get(uri.AbsoluteUri)) { //收到回应才继续走下一步 yield return request.SendWebRequest(); //网络错误 或者会 http访问错误 if (request.isNetworkError || request.isHttpError) { onComplete?.Invoke(null); } else { //http request内部的下载器里的数据,赋值给回调函数 onComplete?.Invoke(request.downloadHandler.data); } } } public void ReadAssetBundle(string fileUrl, BaseAction<byte[]> onComplete) { YouYou.GameEntry.Instance.StartCoroutine(ReadStreamingAsset(fileUrl,onComplete)); } }