public void Initialize() { m_dicLocalResData = new Dictionary <uint, CMResourceDefine.LocalResourceData>(); m_atlas = new Dictionary <string, CMAtlas>(); m_fonts = new Dictionary <string, CMFont>(); m_objs = new Dictionary <string, CMObj>(); m_texs = new Dictionary <string, CMTexture>(); List <table.UIResourceDataBase> resList = GameTableManager.Instance.GetTableList <table.UIResourceDataBase>(); if (null != resList) { table.UIResourceDataBase db = null; CMResourceDefine.LocalResourceData localData = null; for (int i = 0, max = resList.Count; i < max; i++) { db = resList[i]; localData = CMResourceDefine.LocalResourceData.Create(db.ID); m_dicLocalResData.Add(db.ID, localData); } } }
/// <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="resID"></param> /// <returns></returns> public static IUIFont GetFont(uint resID) { table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID); if (null == rsDb) { return(null); } return(DataManager.Manager <CMResourceMgr>().GetFont(rsDb.assetbundlePath, rsDb.resRelativePath, rsDb.idle2releaseTime, 10)); }
public static void ReleaseObjs(uint resID, Transform trans) { table.UIResourceDataBase db = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID); if (null == db) { Engine.Utility.Log.Error("UIManager->ReleaseObjs failed, assetDB not found resId =", resID); return; } DataManager.Manager <CMObjPoolManager>().DespawnObj(db.resRelativePath, trans); }
//public static CMAtlas GetAtlas(AtlasID atlasID) //{ // return GetAtlas((uint)atlasID); //} #endregion #region Font /// <summary> /// 获取字图(异步) /// </summary> /// <param name="resID"></param> /// <param name="font"></param> /// <param name="fe"></param> /// <param name="param"></param> public static void GetFontAsyn(uint resID, ref CMResAsynSeedData <CMFont> seedData, CMResEvent <CMFont> fe, object param = null) { table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID); if (null == rsDb) { if (null != fe) { fe.Invoke(null, param, null, null); } return; } DataManager.Manager <CMResourceMgr>().GetFontAsyn(rsDb.assetbundlePath, rsDb.resRelativePath, ref seedData, fe, rsDb.idle2releaseTime, 10, param); }
/// <summary> /// /// </summary> /// <param name="resID"></param> /// <param name="tsEvent"></param> /// <param name="param"></param> public void SpawnObjAsyn(uint resID, CMResEvent <Transform> tsEvent, object param1 = null, object param2 = null, object param3 = null) { table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID); if (null == rsDb) { if (null != tsEvent) { tsEvent.Invoke(null, param1, param2, param3); } return; } CMObjPool pool = null; if (m_pools.TryGetValue(rsDb.resRelativePath, out pool) && pool.State != CMObjPool.CMObjPoolState.Release) { if (null != tsEvent) { tsEvent.Invoke(pool.SpawnInstance(Vector3.zero, Quaternion.identity, true), param1, param2, param3); } } else { if (null != pool) { pool = null; RemovePool(rsDb.resRelativePath); } DataManager.Manager <CMResourceMgr>().GetGameObjAsyn(rsDb.assetbundlePath, rsDb.resRelativePath, (obj, passParam1, passParam2, passParam3) => { CMObjPool newpool = CreatePool( rsDb.resRelativePath , obj.GetGameObj().transform , rsDb.resKeepType != 2 , (int)rsDb.resPreloadNum , (int)rsDb.resCloneNumLimit , (rsDb.releaseCullAboveMask != 0) , (int)rsDb.releaseCullAboveNum , (int)rsDb.resIdleKeepNum , rsDb.idle2releaseTime , rsDb.active2idleTime , (rsDb.cloneAddScriptState == 1) ? rsDb.resName : ""); if (null != tsEvent) { tsEvent.Invoke(newpool.SpawnInstance(Vector3.zero, Quaternion.identity), passParam1, passParam2, passParam3); } }, param1, param2, param3); } }
/// <summary> /// 获取贴图(异步) /// </summary> /// <param name="resID"></param> /// <param name="tex"></param> /// <param name="te"></param> /// <param name="param"></param> private static void GetTextureAsyn(uint resID, ref CMResAsynSeedData <CMTexture> seedData, CMResEvent <CMTexture> te, object param1 = null, object param2 = null, object param3 = null) { table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID); if (null == rsDb) { if (null != te) { te.Invoke(null, param1, param2, param3); } return; } DataManager.Manager <CMResourceMgr>().GetTextureAsyn(rsDb.assetbundlePath, rsDb.resRelativePath, ref seedData, te, rsDb.idle2releaseTime, 10f, param1, param2, param3); }
/// <summary> /// 获取图集(异步) /// </summary> /// <param name="resID"></param> /// <param name="atlas"></param> /// <param name="ae"></param> /// <param name="param"></param> public static void GetAtlasAsyn(uint resID, ref CMResAsynSeedData <CMAtlas> seedData, CMResEvent <CMAtlas> createDlg, object param1 = null, object param2 = null, object param3 = null) { table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID); if (null == rsDb) { if (null != createDlg) { createDlg.Invoke(null, param1, param2, param3); } return; } DataManager.Manager <CMResourceMgr>().GetAtlasAsyn(rsDb.assetbundlePath, rsDb.resRelativePath, ref seedData, createDlg, rsDb.idle2releaseTime, 10 , param1, param2, param3); }
/// <summary> /// 获取实例(同步) /// </summary> /// <param name="abPath"></param> /// <param name="assetName"></param> public Transform SpawnObj(uint resID, bool setActive = true) { table.UIResourceDataBase rsDb = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID); if (null == rsDb) { return(null); } Transform ts = null; CMObjPool pool = null; if (m_pools.TryGetValue(rsDb.resRelativePath, out pool) && pool.State != CMObjPool.CMObjPoolState.Release) { ts = pool.SpawnInstance(Vector3.zero, Quaternion.identity, setActive); } else { if (null != pool) { RemovePool(rsDb.resRelativePath); } IUIGameObj ig = DataManager.Manager <CMResourceMgr>().GetGameObj(rsDb.assetbundlePath, rsDb.resRelativePath); if (null == ig.GetGameObj()) { Engine.Utility.Log.Error("ObjPoolManager->ig.GetGameObj() null, assetName:{0}", rsDb.resRelativePath); return(null); } CMObjPool newpool = CreatePool( rsDb.resRelativePath , ig.GetGameObj().transform , rsDb.resKeepType != 2 , (int)rsDb.resPreloadNum , (int)rsDb.resCloneNumLimit , (rsDb.releaseCullAboveMask != 0) , (int)rsDb.releaseCullAboveNum , (int)rsDb.resIdleKeepNum , rsDb.idle2releaseTime , rsDb.active2idleTime , ((rsDb.cloneAddScriptState == 1) ? rsDb.resName : "")); ts = newpool.SpawnInstance(Vector3.zero, Quaternion.identity, setActive); } return(ts); }
public static GameObject GetResGameObj(uint resID) { table.UIResourceDataBase resDB = GameTableManager.Instance.GetTableItem <table.UIResourceDataBase>(resID); return(GetResGameObj(resDB.assetbundlePath, resDB.resRelativePath)); }