unity 关于LoadFromCacheOrDownload(原)

初衷是想研究下u3d的热更新资源,所以看到这个api, 本来想用它来做,但是后来发现一些新问题,就改用别的方案了,具体细节会另开一篇文章,这里只单说下LoadFromCacheOrDownload它自己

 

一。函数功能:用来从服务器下载资源,并且保存在本地高速缓存,下次资源没改变的情况下从高速缓存读取

 

二。参数:

url:资源地址

version:资源版本

只要版本号改变(无论增大还是减小),就会重新下载

crc:资源校验码

1.crc是用来校验文件是否改变或损坏,每一个文件都有一个crc码

2.当第一次下载资源时,会用当前的crc和服务器上的资源做crc校验,如果不同,则返回下载失败,相同才下载

3.当本地有当前资源的缓存时,并且版本号没变的情况下,会和本地的资源做crc校验,如是不同(损坏或下载了不完整的资源),会重新去服务器下载资源

4.当crc为0时,则不校验

5.crc是在打包assetbundle时生成的(官方说是32位的crc码,但用通用的32位crc算法自己生成文件校码后,发现和u3d生成的不同,应该u3d自己换了算法或换了码表,4.2以后的版本打包才有,所以之前的版本只能传0)

打包时的crc生成,4.2版本没有crc参数

uint crc = 0;
BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, out crc , BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, BuildTarget.StandaloneWindows);

 

3其它说明

下载后的高速缓存会存在各系统的沙箱目录下Application.persistentDataPath

PC的是C:\Users\用户名\AppData\LocalLow\Unity\WebPlayer\Cache\CompanyName_ProductName

每个版本会下载对应的缓存文件夹

每份缓存由__info和CAB-XXXX组成

__info中记录的应该是当前资源的版本号,CAB-XXXX应该就是缓存文件了,本地有缓存时就应该是和它做crc校验了,当CAB-XXXX被改变时(可以人为破坏),crc校验失败,就会重新从服务器下载新的资源

 

Unity引擎中的`WWW.LoadFromCacheOrDownload()`方法是一个用于异步下载资源的API,它会在本地缓存中查找资源,如果找到则直接加载,如果没有则开始网络下载。这个方法通常用于游戏场景中的预加载或资源获取,可以避免频繁地访问网络。 如果你想要寻找替代方法,有以下几个考虑: 1. 使用`UnityWebRequest`:这是Unity官方推荐的HTTP请求库,提供了更细粒度的控制,比如设置超时、处理响应状态码等。你可以创建一个新的`UnityWebRequest`实例,然后通过`GetAsync`、`DownloadHandlerFile`等方法来实现下载操作,并通过回调函数处理结果。 ```csharp using UnityEngine; using System.Collections.Generic; using UnityEngine.Net; public class CustomLoader : MonoBehaviour { public void LoadAsset(string url) { UnityWebRequest www = UnityWebRequestTexture.GetAsync(url); www.downloadHandler = new DownloadHandlerFile(); www.SendWebRequest(); www.OnProgress += OnProgressChanged; // 自定义进度监听 www.OnComplete += OnCompletion; // 下载完成后的回调 } private void OnProgressChanged(UnityWebRequest www) { // 更新下载进度... } private void OnCompletion(UnityWebRequest www) { if (www.isNetworkError || www.isHttpError) Debug.LogError(www.error); else { Texture2D texture = DownloadHandlerTexture.GetContent(www) as Texture2D; // 处理下载成功的纹理... } } } ``` 2. `AsyncOperation`或`Coroutine`:如果你需要更细致的控制流程,可以使用`async/await`配合`Coroutine`进行逐层调度。 3. 利用第三方插件或库:市场上有许多第三方资源管理库,如uLoad、NGUI等,它们可能提供更好的用户体验和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值