Desc: Manifest 储存着所有AB和AB之间的依赖关系
AssetsPathMapping 包含着资源路径到AB的路径映射
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class ResourcesMapItem { public string assetbundleName; public string assetName; } protected Dictionary<string , ResourcesMapItem> pathLookup = new Dictionary<string , ResourcesMapItem>();protected Dictionary<string , List<string >> assetsLookup = new Dictionary<string , List<string >>();protected Dictionary<string , string > assetbundleLookup = new Dictionary<string , string >();protected List<string > emptyList = new List<string >();
资源异步加载 AssetBundleManager.LoadAssetAsync(assetPath,assetType): ·编辑器模式下,根据路径获取;如果是图集,则加载所有图片;不是则加载资源,返回一个加载器 ·发布版本模式下,根据资源得到ab包,判断ab包是否存在,如果存在则判断是否还在内存中,返回加载器
prosessingWebRequester: prosessingAssetBundleAsyncLoader: 存储目前进行的ab加载器(AssetBundleAsyncLoader) 初始化时,判断本身是否在内存中,并加载依赖项 进度,当前等待列表中已经加载的比例 更新:判断等待列表是否为0 prosessingAssetAsyncLoader: 存储目前进行的资源加载器(AssetAsyncLoader),会创建ab加载器,等到ab加载器执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void Update (){ OnProsessingWebRequester(); OnProsessingAssetBundleAsyncLoader(); OnProsessingAssetAsyncLoader(); } void OnProsessingAssetAsyncLoader (){ for (int i = prosessingAssetAsyncLoader.Count - 1 ; i >= 0 ; i--) { var loader = prosessingAssetAsyncLoader[i]; loader.Update(); if (loader.IsDone()) { prosessingAssetAsyncLoader.RemoveAt(i); } } }
版本更新 AssetbundleUpdater.cs StartCheckUpdate://检查更新 InitLocalVersion();//初始化本地版本号 ChannelManager.Instance.IsInternalVersion();//获取服务器版本号 needDownloadGame=//检测App版本号 needUpdateGame=//检测资源版本号 CompareVersions();//比对资源哈希,不同或不存在则加入到更新列表中 //增量更新 Update中,创建加载器拉去web资源到本地,拉去成功后替换本地的ab
热修复 HotfixMain.lua 存储着需要被加载的热修复模块 Start(): 遍历模块,调用 Register 方法 Stop(): 遍历模块,调用 Unregister 方法
1 2 3 4 5 6 7 8 9 10 local function Register () xlua.hotfix (AssetbundleUpdater, "TestHotfix" , AssetbundleUpdaterTestHotfix ) util.hotfix_ex (AssetBundleManager, "TestHotfix" , AssetBundleManagerTestHotfix ) end local function Unregister () xlua.hotfix (AssetbundleUpdater, "TestHotfix" , nil ) xlua.hotfix (AssetBundleManager, "TestHotfix" , nil ) end
链接 github