Unity GameFramework框架笔记-资源管理之资源加载

Unity GameFramework加载资源流程:

加载资源(LoadAsset)

 

检查资源(CheckAsset)

AssetInfo是资源信息,ResourceInfo是资源对应的AB包信息,在单机包初始化资源或热更包下载前检查资源时,会根据本地的version.dat或服务端的version.dat、Packed的list.dat、根据已下载资源的信息本地生成的list.dat,缓存AssetInfo、ResourceInfo信息,因此据此判断资源是否存在

 

开始加载资源(LoadAsset)

创建加载资源任务 → 遍历、加载依赖资源 → 检查依赖资源 → 创建依赖资源加载任务 ->遍历、加载依赖资源的依赖资源 → ...

以上过程递归,添加该资源及其所有依赖资源的加载任务到任务池,接下来在Update中执行加载任务

 

 

任务池Update

遍历执行中的任务(ProcessRunningTasks)

如果执行完成,则重置、释放任务Agent

 

遍历等待中的任务(ProcessWaitingTasks)

如果有等待的任务及空余任务代理,则分配任务代理

开始任务前,前置判断:

等待(HasToWait):资源正在加载、其依赖资源还未加载、其对应的ab包正在加载

取消当前任务代理,继续等待

 

完成(Done):资源池中已有该资源

移除当前任务

 

继续(CanResume):其对应的ab包已加载、开始加载任务

取消当前任务代理、移除当前任务、释放任务

 

判断为Done的情况:执行加载成功回调(OnAssetObjectReady,OnLoadAssetSuccess)

回调从LoadAsset开始传入,并传入加载任务中,最后执行回调(m_Task.OnLoadAssetSuccess)

 

加载资源任务完成,加载状态会被主动置为Done,相关任务及Agent在ProcessRunningTasks中被移除

加载依赖资源任务完成,会在ProcessWaitingTasks的agent.Start()判断为Done,移除相关任务及Agent

 

其对应的ab包已加载的情况: 

加载资源(OnResourceObjectReady,m_Task.LoadMain,agent.Helper.LoadAsset)

从ab中异步加载资源(assetBundle.LoadAssetAsync)

加载成功、缓存资源(LoadResourceAgentHelperLoadComplete)

加载成功回调(OnAssetObjectReady)

转到判断为Done的情况

 

开始加载任务的情况:

读取文件加载对应的ab包(m_Helper.ReadFile)

异步加载ab包(AssetBundle.LoadFromFileAsync)

加载完成(LoadResourceAgentHelperReadFileComplete,OnResourceObjectReady)

转到ab包已加载的情况

 

读取二进制流加载ab包(m_Helper.ReadBytes)

异或解密,在打包时选择异或加密保存,读取时也必须异或解密才能正确读取(OnLoadResourceAgentHelperReadBytesComplete,m_DecryptResourceCallback)

二进制流转换为加载对象(AssetBundle.LoadFromMemoryAsync)

加载完成(OnLoadResourceAgentHelperParseBytesComplete,OnResourceObjectReady)

转到ab包已加载的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值