Addressable与YooAsset对比

Addressable与YooAsset对比

资源打包分组

二者本质都是对AssetBundle进行了一层包装。

Addressable:

  • 分组规则: Group->Entry, 1、Group分组,内部包含很多个Entry(也就是单个的资源)。 2、在对Entry进行分组的时候,同一个Entry是不允许加入到多个Group的。内部代码在对Entry进行分组的时候,如果已经有Group了,会先从之前的Group移除,再重新添加到新的Group中。
  • 冗余资源解决: 1、Addressable并没有完全的解决资源冗余的问题,需要用户自己去进行控制 2、不同Bundle共享的资源,可以单独打一个bundle包或者加入到其中一个bundle里吗,否则会存在多份资源,导致冗余

YooAsset:

  • 分组规则: Package->Group->Collect,
    1、每个Package都是一个独立的包,各自引用自己内部的资源,互不干扰。Group和Collect就和上面的Group和Entry功能类似。
    2、在添加资源到Group时,不会进行重复校验,但是在执行打包命令的时候,会提示 The collecting asset file is existed xxx
  • 冗余资源解决: 1、GetPackageAssets 收集所有的Collect,有重复的会抛出异常 2、RemoveZeroReferenceAssets 移除没有被引用到的依赖资源
    3、自动收集所有的Shader,单独设置BundleName
    4、计算共享资源的包名,如果开启了EnableSharePackRule,就会将依赖资源(这部分资源一开始是没设置BundleName的)按照路径的文件夹名称设置新的BundleName,这样就把同一个目录下的依赖资源都打进同一个Bundle中。这样就避免了冗余
    5、然后再次移除没有bundleName的资源 6、最后构建资源

加载与缓存

Addressable

  • 本地缓存机制:利用UnityWebRequest的机制把请求结果直接进行了缓存,在进行请求时,根据参数去指定缓存路径
  • 远程文件加载机制:初始化完配置文件之后,直接使用UnityWebRequest进行下载,UnityWebRequest内部会检测本地是否有缓存的资源,然后会进行校验,如果是正确的资源,就直接返回本地资源,否则下载远程资源,然后再加载

YooAsset

  • 本地缓存机制: UnityWebRequest先把数据缓存在临时的temp目录,然后复制到设定的Cache目录下
  • 远程文件加载机制:在Package初始化的时候,会先把本地缓存路径下的所有文件都读取,并缓存在字典里,记录哪些文件是本地存在的,后续加载的时候,会先从这个字典中进行检查,如果存在,就直接AssetBundle.LoadAsset,否则下载远程资源,然后再加载

卸载

Addressable

  • 管理模式:使用引用计数管理,,每个bundle在加载的时候都会生成一个IAsyncOperation,这个IAsyncOperation维护着一个计数器。
  • Addressables.Release/Addressables.ReleaseInstance,会使相关的IAsyncOperation引用计数减 1。然后配合 Resources.UnloadUnusedAssets() 进行完全释放

YooAsset

  • 管理模式:使用引用计数管理,每个bundle在加载的时候都会生成一个LoadBundleFileOperation,这个LoadBundleFileOperation维护着一个计数器。
  • package.UnloadUnusedAsset: 1、当package.LoadAssetSync返回的AssetHandle被释放掉的时候,相关的计数器就会减1,这时候就能使用UnloadUnusedAsset了。这里管理不好,容易出现内存泄漏,引用丢失等问题
  • package.UnloadAllAssetsAsync: 会直接释放掉资源,如果有对象正在使用相关资源,就会丢失掉,导致显示异常

AB包大小

Addressable

  • ab包大小:
    prefab: 8,064 字节.
    materials :8,720 字节.
    Texture:535,792 字节
    BuildIn:143,520字节
    Addressable与YooAsset对比_第1张图片

YooAsset

  • ab包大小:
    prefab:8,032 字节
    materials :8,736 字节
    Texture:535,776 字节
    BuildIn:143,760字节![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f474fe3d9f734a919dd2bb5f130ac495.pngAddressable与YooAsset对比_第2张图片

对比发现YooAsset 比 Addressable 要小一点,看起来是 Bundle内资源数量 x 16字节,这个得确认下,是不是打包设置有问题。

资源版本管理/版本回退

Addressable

  • cdn切换:使用Addressables.InternalIdTransformFunc来对资源下载的地址进行修改,以达到cdn切换的目的
  • 版本回退:Addressable的更新判断,只对比hash,如果有变化就会触发更新,可以按版本去保存对应的hash和json文件,根据服务器下发的版本,去下载对应的配置文件。通过修改Addressables.InternalIdTransformFunc来指引到对应版本的catalog文件,以实现版本回退操作,参考目录结构,文件夹就是版本号
    代码如下
    Addressable与YooAsset对比_第3张图片
    版本1:
    Addressable与YooAsset对比_第4张图片
    版本2
    Addressable与YooAsset对比_第5张图片

YooAsset

  • cdn切换:YooAsset内置了_defaultHostServer 和 _fallbackHostServer,内部可自动进行切换
  • 版本回退:直接修改cdn目录上对应packageName.version 中的版本号即可

你可能感兴趣的:(java,spring,后端)