简介
Resource
是一个全自动化,且简单易用的资源管理系统,继承于GameComponet
实现 ,它内部使用RC
的方式来管理资源的引用,且不需要手动显示释放,而是通过拦截finalizer的方式,来达到释放的目的,比手动安全性更高,也更易用。
它仅提供了两组接口资源加载接口LoadAsset
LoadAssetAsync
,。并提供了虚拟化的方式加载,在编辑器模式下不会真正的构建AssetBundle
包,从而提供开发效率。
Resource
也包括流场景构建,可以将整个场景都作为热更新资源。
Feature
-
自动化检测文件变动 通过
Radix
算法,监控资源变动,来自动构建manifest
。上层只需要关注资源本身,无需关注AssetBundle
包的构建。做到对上层完全无感。 -
自动化引用计数 通过
RC
+ finalizer,监控资源的引用,来自动释放资源。且无需轮询检查资源的引用计数,提供更好的性能,做到对上层完全无感。也没有手动释放接口,提高安全性和易用性 -
自动化冗余剔除 在构建的时候自动收集冗余资源,如像A->(C,D) B->(C) 此时(A,D)将会作为一个的bundle,而C则会单独作为一个bundle
-
Profile资源使用分析,用以在运行时统计各个资源的引用和加载数
-
自定义流处理,支持加密等自定义操作
-
多种模式支持
-
Builtin: 内建资源,默认将资源插入母包中。
-
Remote: 远程资源模式,仅需要配置远程资源地址即可,所有资源不会在本地存盘,只会在内存中使用,使用完后立即释放,防止被反编译资源
-
-
无感知资源更新 一般出现资源更新的时候,都是先下载到本地,然后再通过加载本地资源的方式实现, 现由
FS
映射的远程目录,通过分流的方式,可以实现一边从远程直接读取,并copy另外一部分流到本地磁盘,减少重新读盘的情况。 对于下载过程对于玩家而言完全无感,其本身下载速度是可以被控制,当前并没有暴露此接口(因为带宽值是动态变化的,无法根据不同的条件找到一个合理值),只是需要设定一个百分率阈值,内部自动计算下载速度尽可能保证达到预期值。 -
淘汰策略 当某个Assetbundle的引用计数为0时候,底层不会立即释放它,而是根据它过往的加载次数判断下一次淘汰次数,越大将会越晚淘汰,当然也提供了强制卸载函数。
后续计划
现阶段 已实现Resource
是依赖于Assetbundle
后续会抽象出一层 FS
以提供自定义流提供更多可操作性和安全性。
Resource
现在可以说是完全不能脱离Unity
独立运行,这不是一个好的方式,我期望提供更高的抽象满足多个引擎的需求。当完成这一步时只需要在Unity
中需要手动实现一个Adaptor
即可。