美文网首页
Unity AssetBundle

Unity AssetBundle

作者: 不正经的搬砖工 | 来源:发表于2020-12-19 14:49 被阅读0次

    1、Hash

    使用BuildPipeline.BuildAssetBundles(targetPath, Options, BuildTarget); 生成AssetBundle时,可以将Options参数添加BuildAssetBundleOptions.AppendHashToAssetBundleName选项,这样生成的Bundle名字都会带一个Hash。这样便于热更新,当资源内容改变而名字本身不会变化时,通过Hash值的差异就可以比较出是新资源还是旧资源了。但在实际操作中却遇到了资源有变化但生成的Hash码却未变的情况,后网上一查,才知Unity的Hash算法只是个伪hash算法,相当不靠谱。后来我们生成Bundle后又对Bundle的名字加了CRC校验码,确保资源变化后名字一定又变化。

    2、CRC校验

    通过BuildPipeline.GetCRCForAssetBundle(string targetPath,out uint crc)接口可以获取某个Bundle的CRC值。使用UnityWebRequestAssetBundle.GetAssetBundle(string uri,CahcedAssetBundle cachedAssetBundle,uint crc = 0u)下载Bundle时可以设置是否进行crc校验,crc默认为0,即不进行crc校验,非零则拿传入的值对下载下来的Bundle进行crc校验,校验不对则返回错误。

    3、Caching

    Caching类用来管理AssetBundles缓存,Unity可以创建多个缓存Cache。Caching.GetAllCachePaths(pathes)获取所有缓存路径。Caching.AddCache(string cachePath)可以添加新的Cache。Caching.currentCacheForWriting设置当前缓存路径。当设置了该属性时,使用UnityWebRequestAssetBundle下载的AssetBundle就会存储到这个缓存路径中。

    每个Cache都有一个maximumAvailableStorageSpace属性,即当前缓存最大可用存储空间,该值默认为4G,expirationDelay属性即最大缓存时间,默认为150days。我们可以使用Application.persistentDataPath作为缓存路径存储热更新的资源,这样资源就不会过期清除了。

    相关文章

      网友评论

          本文标题:Unity AssetBundle

          本文链接:https://www.haomeiwen.com/subject/oknsvktx.html