/// <summary> /// 预加载 /// </summary> private void DoPreLoadSceneUI() { int max = 0; table.UIResourceDataBase tempRes = null; //1、获取预加载资源列表 List <uint> needPreLoadRes = new List <uint>(); List <table.UIResourceDataBase> resList = GameTableManager.Instance.GetTableList <table.UIResourceDataBase>(); if (null != resList) { for (int i = 0, maxR = resList.Count; i < maxR; i++) { tempRes = resList[i]; if (IsPreLoadMaskMatch(tempRes.resPreloadMask)) { needPreLoadRes.Add(tempRes.ID); } } max = needPreLoadRes.Count; } //取消预加载 //max = 0; //2、执行预加载 if (max == 0) { OnResPreLoad(1f); return; } int loadCount = 0; AssetLoadFinsh callBack = (resObj, param1, param2, parm3) => { uint resID = 0; if (null != param1 && param1 is uint) { resID = (uint)param1; if (needPreLoadRes.Contains(resID)) { loadCount++; OnResPreLoad((float)loadCount / max); } } if (null == resObj) { Engine.Utility.Log.Error("UIManager->Preload AssetError ResID:{0}", resID); } }; for (int i = 0; i < max; i++) { tempRes = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(needPreLoadRes[i]); if (null == tempRes) { callBack.Invoke(null, needPreLoadRes[i], null, null); continue; } DataManager.Manager <CMAssetBundleLoaderMgr>().CreateAssetAsyn(true, tempRes.assetbundlePath, tempRes.resRelativePath, callBack, tempRes.ID); } }
/// <summary> /// 获取资源(异步) /// </summary> /// <param name="abPath"></param> /// <param name="assetName"></param> /// <param name="loadFinish"></param> /// <param name="param"></param> public void CreateAssetAsyn(bool preLoad, string abPath, string assetName, AssetLoadFinsh loadFinish, object param1 = null, object param2 = null, object param3 = null) { CMAssetBundle cmAB = null; if (!m_dicAssetBundleDatas.TryGetValue(abPath, out cmAB)) { cmAB = CMAssetBundle.Create(abPath); m_dicAssetBundleDatas.Add(abPath, cmAB); } cmAB.CreateAssetAsyn(preLoad, assetName, loadFinish, param1, param2, param3); LoadAssetBundleAsyn(cmAB.ABPath); }
/// <summary> /// 添加资源 /// </summary> /// <param name="callback"></param> private void AddAssetLoadComplteDlg(string assetName, AssetLoadFinsh callback, object param1 = null, object param2 = null, object param3 = null) { CMAssetLoadFinsh callbackData = new CMAssetLoadFinsh() { AssetName = assetName, FinshDlg = callback, Param1 = param1, Param2 = param2, Param3 = param3, }; List <CMAssetLoadFinsh> datas = null; if (!m_dicLoadAssetDlg.TryGetValue(callbackData.AssetName, out datas)) { datas = new List <CMAssetLoadFinsh>(); m_dicLoadAssetDlg.Add(callbackData.AssetName, datas); } datas.Add(callbackData); }
/// <summary> /// 穿件资源异步 /// </summary> ///<param name="preLoad">是否为预加载</param> /// <param name="assetName"></param> /// <param name="callback"></param> /// <param name="param"></param> public void CreateAssetAsyn(bool preLoad, string assetName, AssetLoadFinsh callback, object param1 = null, object param2 = null, object param3 = null) { AddAssetLoadComplteDlg(assetName, callback, param1, param2, param3); if (!preLoad) { ReferenceAssset(assetName); } if (IsDone()) { if (IsAssetReady(assetName)) { InvokeAssetLoadDlg(assetName); } else { CheckCacheToLoadAsset(); } } }