资源处理是游戏中很重要的一模块。
提示:资源创建,资源初始化,资源加载,资源卸载,为整个流程。
关于资源怎么创建出来的,如何打ab资源,看这篇内容:GameFramework:AssetBunle 工具、配置、打包设置
文章目录
一、资源管理器
Editor Resource Mode
一看这个描述,还是不太清楚,到底是啥意思。
我们就查找所有引用,看看这个属性用到了那些地方,有啥作用。
1、如果勾选,就用EditorResourceHelper编辑器资源组件,反之ResourceManager资源管理器。
2、数据表组件,场景组件,声音组件等等,关于组件模块需要用到资源管理器的,都会设置资源管理器,对应使用。
3、根据Editor Resource Mode 是否走,编译器模式流程。
GameEntry.Resource.ResourceMode 根据走单机,还是热更流程。
4、Editor Resource Mode 勾选启用自己并且编辑器资源组件赋值,反之不启用。
EditorResourceComponent
编辑器资源组件,专门给在编译器下处理资源加载的,后面会单独介绍。
这个脚本并没有继承GameFrameworkModule类,猜想可能是EditorResourceMode勾选启用,更加方便吧。
二、资源初始化
编辑器模式下,并没有初始化资源这个流程。
1、在单机模式,会进入ProcedureInitResources,资源初始化就是从这个流程开始的。
GameEntry.Resource.InitResources(OnInitResourcesComplete);
接着往下看,咱们会看到这里,主要看ResourceManager,因为咱们走的并不是编辑器模式。
大家看到这个初始化。
m_ResourceManager.m_ResourceHelper.LoadBytes
下面这个回调,才是重中之重。
OnLoadPackageVersionListSuccess
从StreamAssets读取GameFrameworkVersion.dat。
从GameFrameworkVersion.dat读取二进制文件流,利用回调函数解析资源信息,把资源分组加载到资源组里面。
下面我框起来的,这个大家注意看一下,后面加载资源就是从m_ResourceManager.m_AssetInfos 这里面拿出资源使用的,后面资源加载再详细的介绍。
2、热更的资源初始化。
ResourceManager.ResourceChecker 这个脚本里面。
三、资源加载
加载资源这个操作,大家应该看到很多。
我们来看看怎么处理的,从ResourceManager.ResourceLoader脚本看看。
从CheckAsset函数里面定位到GetAssetInfo
m_AssetInfos 这个大家看到过的,资源初始化这个字典就获取到了资源信息的数据。
四、资源卸载
走的资源池,释放的流程。可以看到各个模块的辅助器,都有调用,卸载资源的引用。
我们来看个释放界面的例子。
m_ResourceComponent.UnloadAsset 卸载资源
Destroy 删除对象
先给对象回收,如果有释放就走释放的流程。
释放之前会有,释放对象池中的可释放对象,流程筛选。
会从对象池释放对象。
总结
资源的初始化,资源加载,资源卸载,整个流程大家应该有了初步的了解,想要了解的更深入,还需要仔细的研究。