public void AsyncObjCallBack(bool LoadResult, ResInfo resInfo) { if (!LoadResult) { mAsyncLoadingObjDic.Remove(resInfo.ResPath); ResManager.Instance.RemoveLoadFailRes(resInfo.mCRC); resInfo.Recycle2Cache(); mAsyncLoadingObjDic[resInfo.ResPath].ForEach((objLoadInfo) => { objLoadInfo.loadObjCall.InvokeGracefully(LoadResult, null); objLoadInfo.Recycle2Cache(); }); mAsyncLoadingObjDic.Remove(resInfo.ResPath); return; } bool DestroyCache = false; mAsyncLoadingObjDic[resInfo.ResPath].ForEach((objLoadInfo) => { ResObject resObject = ResObject.Allocate(objLoadInfo); resObject.mObj = resInfo.ResObject; resObject.ABName = resInfo.ABName; resObject.mCloneObj = GameObject.Instantiate(resObject.mObj, objLoadInfo.ObjParentTrans) as GameObject; mObjList.AddValue(resObject.mCloneObj.GetInstanceID()); objLoadInfo.loadObjCall.InvokeGracefully(LoadResult, resObject); ResManager.Instance.CacheResObj(resObject); if (objLoadInfo.mClear) { DestroyCache = true; } resObject.Retain(); resInfo.Retain(); objLoadInfo.Recycle2Cache(); }); resInfo.DestroyCache = DestroyCache; mAsyncLoadingObjDic.Remove(resInfo.ResPath); }
public ResObject LoadResSyncForObj(ObjLoadInfo objLoadInfo) { ResObject resObject = ResObject.Allocate(objLoadInfo); ResInfo resInfo = ResManager.Instance.GetRes(objLoadInfo.mCRC); //之前就未加载 if (resInfo == null) { ResLoadInfo resLoadInfo = ResLoadInfo.Allocate(objLoadInfo); resObject.mObj = LoadSync(resLoadInfo); resLoadInfo.Recycle2Cache(); } //之前就加载完成 else if (resInfo.State == ResState.Ready) { resInfo.Retain(); resObject.mObj = resInfo.ResObject; } else { AFLogger.e("同步遇到异步正在或者等待加载的资源 : " + resInfo.ResPath + ",请检查调用代码!"); } return(resObject); }