unity 关于LoadFromCacheOrDownload(原)

本文深入探讨了U3D热更新资源的技术原理及应用实践,包括资源下载、缓存管理与版本控制等方面,详细解析了LoadFromCacheOrDownload API的功能与使用方法,同时分享了在实际项目中遇到的问题与解决方案。

初衷是想研究下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 中创建或集成画廊功能 在 Unity 中实现画廊功能可以通过多种方式完成,具体取决于需求的复杂程度以及目标平台。以下是几种常见的方法及其技术细节: #### 方法一:利用 Texture 和 Image 导出功能 Unity 提供了丰富的 API 来操作纹理和图像数据,这使得我们可以轻松地加载、显示并保存图片到设备上。例如,可以使用 `Texture2D` 类来加载本地图片或者动态生成的内容,并通过插件将这些内容导出为 PNG 或 JPG 文件。 - **加载图片** 使用 `WWW.LoadFromCacheOrDownload` 或者现代替代方案 `UnityWebRequest` 加载外部资源[^3]。 - **显示图片** 将加载好的 `Texture2D` 资源赋值给 UI 图像组件 (`Image`) 的 `sprite` 属性即可展示图片。 - **保存图片** 利用第三方库(如 Simple File Browser 插件)提供跨平台兼容性,允许用户选择存储路径并将渲染结果写入磁盘。 ```csharp // 示例代码:保存当前屏幕截图至相册 public void SaveScreenshot() { string filename = System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".png"; Application.CaptureScreenshot(filename); } ``` --- #### 方法二:借助 AssetBundle 实现离线画廊 如果希望预置一些固定素材作为初始画廊内容,则可通过打包 AssetBundles 方便管理大容量媒体资产。这种方式特别适合于需要频繁更新但又不想重新发布整个应用的情况。 - 创建 Bundle 包含所需的所有美术资源; - 运行时按需下载解压后挂载到场景中的 Canvas 上呈现出来[^4]。 --- #### 方法三:调用 Native Plugin 扩展生能力 对于更高级别的定制化需求来说,可能还需要深入接触操作系统层面的功能接口。比如 Android 平台上的 MediaStore 数据访问权限申请流程;iOS 设备则涉及 Photos Framework 授权机制等等。此时就需要编写 C++/Java/Objective-C 等语言混合开发部分逻辑并与 MonoScript 对接起来形成完整的解决方案[^5]。 --- #### 注意事项 无论采用哪种策略,在实际部署前都应充分考虑性能开销问题——尤其是当面对海量高清图集浏览情景下更是如此。因此建议合理规划缓存策略减少不必要的重复计算负担的同时也要兼顾用户体验流畅度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值