示例#1
0
        /// <summary>
        /// 异步加载
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="deaFinish">资源加载完成回调</param>
        /// <param name="priority">加载优先级</param>
        /// <param name="setSceneParent">是否设置Parent为SceneTrs</param>
        /// <param name="param1"></param>
        /// <param name="param2"></param>
        /// <param name="param3"></param>
        /// <param name="bClear">跳场景是否清除</param>
        public long InstantiateObjectAsync(string path, OnAsyncObjFinish deaFinish, LoadResPriority priority, bool setSceneParent = false,
                                           object param1 = null, object param2 = null, object param3 = null, bool bClear = true)
        {
            if (string.IsNullOrEmpty(path))
            {
                return(0);
            }
            uint        crc    = CRC32.GetCRC32(path);
            TResouceObj resObj = GetObjectFromPool(crc);

            if (resObj != null)
            {
                if (setSceneParent)
                {
                    resObj.CloneObj.transform.SetParent(SceneTrs, false);
                }
                deaFinish?.Invoke(path, resObj.CloneObj, param1, param2, param3);
                return(resObj.Guid);
            }
            long guid = ResourcesManager.Instance.CreatGuid();

            resObj                = mResouceObjPool.Allocate();
            resObj.Crc            = crc;
            resObj.SetSceneParent = setSceneParent;
            resObj.Clear          = bClear;
            resObj.DealFinish     = deaFinish;
            resObj.Param1         = param1;
            resObj.Param2         = param2;
            resObj.Param3         = param3;
            //调用ResouceManager的异步加载接口
            ResourcesManager.Instance.AsyncLoadResouce(path, resObj, OnLoadResouceObjFinish, priority);
            return(guid);
        }
示例#2
0
    public void TestChangeImageSpriteAsync2(string path, Image image, LoadResPriority priority,
                                            bool isSetNativeSize = false)
    {
        if (image == null)
        {
            return;
        }
        ResourceManager.Instance.AsyncLoadResource(path, (s, o, list) =>
        {
            if (o != null)
            {
                Sprite sp        = o as Sprite;
                Image img        = list[0] as Image;
                bool isSetNative = (bool)list[1];
                if (img.sprite != null)
                {
                    img.sprite = null;
                }

                img.sprite = sp;
                if (isSetNative)
                {
                    img.SetNativeSize();
                }
            }
        }, priority, true, image, isSetNativeSize);
    }
示例#3
0
        /// <summary>
        /// ->objecmanager
        /// </summary>
        /// <param name="path"></param>
        /// <param name="objectItem"></param>
        /// <param name="innerCallBack"></param>
        /// <param name="priority"></param>
        public void AsyncLoadResource(string path, ObjectItem objectItem, OnAsyncPrimitiveAssetFinish innerCallBack,
                                      LoadResPriority priority, bool isSprite = false)
        {
            AssetItem assetItem = GetCacheAssetItem(objectItem.Crc);

            if (assetItem != null)
            {
                objectItem.PrimitiveAssetItem = assetItem;
                innerCallBack?.Invoke(path, objectItem);
                return;
            }

            AsyncLoadAssetParam asyncLoadAssetParam = null;

            if (!asyncLoadAssetParamDic.TryGetValue(objectItem.Crc, out asyncLoadAssetParam))
            {
                asyncLoadAssetParam          = asyncLoadResParamPackPool.Spawn();
                asyncLoadAssetParam.Crc      = objectItem.Crc;
                asyncLoadAssetParam.Path     = path;
                asyncLoadAssetParam.isSprite = isSprite;
                asyncLoadAssetParam.Priority = priority;
                asyncLoadAssetParamDic.Add(objectItem.Crc, asyncLoadAssetParam);
                loadingAssetLists[(int)priority].Add(asyncLoadAssetParam);
            }

            AsyncCallBackPack callBackPack = asyncCallBackPackPool.Spawn();

            callBackPack.PrimitiveAssetFinish = innerCallBack;
            callBackPack.ObjectItem           = objectItem;
            asyncLoadAssetParam.CallBackPacks.Add(callBackPack);
        }
示例#4
0
 public void Reset()
 {
     m_Crc      = 0;
     m_Path     = "";
     m_Priority = LoadResPriority.RES_SLOW;
     isSprite   = false;
 }
示例#5
0
 /// <summary>
 /// 异步获得对象
 /// </summary>
 /// <param name="path">对象路径</param>
 /// <param name="onFinish">获得回调</param>
 /// <param name="priority">加载优先级</param>
 /// <param name="setCreateNode">设置创建节点</param>
 /// <param name="paramValues">回调参数</param>
 public long SpawnAsync(string path, OnAsyncObjFinish onFinish,
                        LoadResPriority priority = LoadResPriority.Res_Middle,
                        bool setCreateNode       = false, params object[] paramValues)
 {
     return(ObjManager.Instance.InstantiateObjectAsyncAsset(path, GetHashCode(), onFinish, priority,
                                                            setCreateNode, paramValues));
 }
示例#6
0
 //数据重置
 public void Reset()
 {
     m_crc             = 0;
     m_resPath         = "";
     m_loadResPriority = LoadResPriority.RES_LOAD_LEVEL_LOW;
     m_isSprite        = false;
     m_asyncCallBacks.Clear();
 }
 public void Reset()
 {
     CallbackList.Clear();
     Crc      = 0;
     Path     = "";
     IsSprite = false;
     Priority = LoadResPriority.RES_SLOW;
 }
示例#8
0
 public void Reset()
 {
     m_CallBackList.Clear();
     m_Crc      = 0;
     m_Path     = string.Empty;
     m_Sprite   = false;
     m_Priority = LoadResPriority.RES_SLOW;
 }
示例#9
0
 public void Reset()
 {
     m_CallBackList.Clear();
     m_Crc      = 0;
     m_Path     = "";
     m_Sprite   = false;
     m_Priority = LoadResPriority.RES_LOW;
 }
示例#10
0
 public void Reset()
 {
     CallBackPacks.Clear();
     Crc      = 0;
     Path     = "";
     isSprite = false;
     Priority = LoadResPriority.RES_LOW;
 }
示例#11
0
 public void Reset()
 {
     crc      = 0;
     path     = "";
     isSprite = false;
     priority = LoadResPriority.RES_SLOW;
     callBackList.Clear();
 }
示例#12
0
 public void Reset()
 {
     CallBackList.Clear();
     Crc      = 0;
     Path     = string.Empty;
     ResType  = typeof(UnityEngine.Object);
     Priority = LoadResPriority.Res_Slow;
     LoadMode = LoadResMode.Resource;
 }
示例#13
0
 public virtual void Init(ResLoadInfo resLoadInfo)
 {
     mResPath        = resLoadInfo.mResPath;
     mLoadRePriority = resLoadInfo.loadResPriority;
     DestroyCache    = resLoadInfo.DestroyCache;
     isSprite        = resLoadInfo.mIsSprite;
     resItem         = new ResItem();
     resItem.mCrc    = Crc32.GetCrc32(mResPath);
     mListener       = resLoadInfo.mListener;
     mResState       = ResState.Waiting;
 }
示例#14
0
        /// <summary>
        /// 异步加载资源 (仅仅是不需要实例化的资源)
        /// </summary>
        private void AsyncLoadResource <T>(string path, OnAsyncObjFinish onFinish, uint crc = 0, ResLoadMode mode = ResLoadMode.Null,
                                           LoadResPriority priority = LoadResPriority.Res_Slow, params object[] paramValues)
            where T : UnityEngine.Object
        {
            if (mode == ResLoadMode.Null)
            {
                mode = LoadMode(ref path);
            }
            if (crc == 0)
            {
                crc = Crc32.GetCrc32(path);
            }

            ResItem item = GetCacheResouceItem(crc);

            if (item != null)
            {
                if (onFinish != null)
                {
                    onFinish(path, item.Obj, paramValues);
                }

                return;
            }

            //判断是否在加载中
            AsyncLoadResParam param = null;

            if (!_LoadingAssetDic.TryGetValue(crc, out param) || param == null)
            {
                param          = _AsyncLoadResParamPool.Spawn(true);
                param.Crc      = crc;
                param.Path     = path;
                param.Priority = priority;
                param.ResType  = typeof(T);
                param.LoadMode = JudgeLoadMode(mode);
                _LoadingAssetDic.Add(crc, param);
                _LoadingAssetList[(int)priority].Add(param);
            }

            //回调列表里面加回调
            AsyncCallBack callBack = _AsyncCallBackPool.Spawn(true);

            callBack.OnObjFinish = onFinish;
            if (paramValues != null && paramValues.Length > 0)
            {
                foreach (object value in paramValues)
                {
                    callBack.Params.Add(value);
                }
            }

            param.CallBackList.Add(callBack);
        }
示例#15
0
        /// <summary>
        /// 异步对象加载
        /// </summary>
        /// <param UIName="path"></param>
        /// <param UIName="fealFinish"></param>
        /// <param UIName="priority"></param>
        /// <param UIName="setSceneObject"></param>
        /// <param UIName="param1"></param>
        /// <param UIName="param2"></param>
        /// <param UIName="param3"></param>
        /// <param UIName="clearChangeScene"></param>
        private long InstantiateObjectAsync(string path, OnAsyncObjFinish onFinish, LoadResPriority priority,
                                            bool setCreateNode = false, params object[] paramValues)
        {
            if (string.IsNullOrEmpty(path))
            {
                return(0);
            }
            ResLoadMode mode = ResManager.Instance.LoadMode(ref path);
            uint        crc  = Crc32.GetCrc32(path);

            return(InstantiateObjectAsync(path, crc, mode, onFinish, priority, setCreateNode, paramValues));
        }
示例#16
0
 /// <summary>
 /// 异步加载资源 (仅仅是不需要实例化的资源)
 /// </summary>
 internal void AsyncLoadResourceAsset <T>(string path, OnAsyncObjFinish onFinish, int assetHelperHash,
                                          LoadResPriority priority = LoadResPriority.Res_Slow, params object[] paramValues)
     where T : UnityEngine.Object
 {
     if (!string.IsNullOrEmpty(path))
     {
         ResLoadMode mode = LoadMode(ref path);
         uint        crc  = Crc32.GetCrc32(path);
         AddResAsset(crc, assetHelperHash);
         AsyncLoadResource <T>(path, onFinish, crc, mode, priority, paramValues);
     }
     else
     {
         Debug.LogError("路径为null");
     }
 }
示例#17
0
        public static ObjLoadInfo Allocate(ResFromType resType, string assetPath, Transform ObjParentTrans,
                                           bool mclear = false, LoadResPriority loadResPriority = LoadResPriority.RES_NUM,
                                           Action <bool, ResInfo> loadResCall = null, Action <bool, ResObject> loadObjCall = null)
        {
            ObjLoadInfo objLoadInfo = SafeObjectPool <ObjLoadInfo> .Instance.Allocate();

            objLoadInfo.mCRC            = Crc32.GetCrc32(assetPath);
            objLoadInfo.mResFromType    = resType;
            objLoadInfo.ObjParentTrans  = ObjParentTrans;
            objLoadInfo.mClear          = mclear;
            objLoadInfo.mResPath        = assetPath;
            objLoadInfo.loadResPriority = loadResPriority;
            objLoadInfo.loadResCall     = loadResCall;
            objLoadInfo.loadObjCall     = loadObjCall;
            return(objLoadInfo);
        }
示例#18
0
        /// <summary>
        /// 这里的mListen与调用loader传的参数并不相同
        /// </summary>
        /// <param name="resType"></param>
        /// <param name="assetPath"></param>
        /// <param name="isSprite"></param>
        /// <param name="mListen"></param>
        /// <returns></returns>
        public static ResLoadInfo Allocate(ResFromType resType, string assetPath, bool isSprite,
                                           Action <bool, ResInfo> mListen  = null, Action <bool, ResInfo> mRealListener = null, bool DestroyCache = false,
                                           LoadResPriority loadResPriority = LoadResPriority.RES_NUM)
        {
            ResLoadInfo resLoadInfo = SafeObjectPool <ResLoadInfo> .Instance.Allocate();

            resLoadInfo.mResPath        = assetPath;
            resLoadInfo.mResFromType    = resType;
            resLoadInfo.mListener       = mListen;
            resLoadInfo.mIsSprite       = isSprite;
            resLoadInfo.DestroyCache    = DestroyCache;
            resLoadInfo.loadResPriority = loadResPriority;
            resLoadInfo.mCRC            = Crc32.GetCrc32(assetPath);
            resLoadInfo.mRealListener   = mRealListener;
            return(resLoadInfo);
        }
示例#19
0
        /// <summary>
        /// 异步资源加载,外部直接调用,(仅仅加载不需要实例化的资源,例如Texture和音频之类的)
        /// </summary>
        public void AsyncLoadResource(string path, OnAsyncFinish dealFinish, LoadResPriority priority, bool isSprite = false, uint crc = 0, params object[] paramList)
        {
            if (crc == 0)
            {
                crc = Crc32.GetCrc32(path);
            }

            AssetBundleInfo abInfo = GetCacheAssetBundleInfo(crc);

            if (abInfo != null)
            {
                dealFinish?.Invoke(path, abInfo.m_Obj, paramList);
                return;
            }

            //判断是否在加载中
            AsyncLoadResUnit unit = null;

            //没有找到这个异步加载单位,或者这个异步加载单位是空
            if (!m_LoadingAssetDic.TryGetValue(crc, out unit) || unit == null)
            {
                unit            = m_AsyncLoadResParamPool.Spawn(true);
                unit.m_Crc      = crc;
                unit.m_Path     = path;
                unit.m_Sprite   = isSprite;
                unit.m_Priority = priority;

                m_LoadingAssetDic.Add(crc, unit);            //添加到正在异步加载的资源dic中

                m_loadingAssetList[(int)priority].Add(unit); //按照加载优先级,添加到对应的正在异步加载的资源列表中
            }

            //往回调列表里面添加回调
            AsynCallBack callBack = m_AsynCallBackPool.Spawn(true);

            callBack.m_DealFinish = dealFinish;
            callBack.m_Params     = paramList;

            //往这个异步加载单位的回调列表中添加一个回调
            //可能多个地方加载同一份资源,这样做只加载一次资源,
            //加载完了后,根据回调列表一次返回这份资源
            unit.m_CallBackList.Add(callBack);
        }
示例#20
0
        /// <summary>
        /// 针对ObjectManager的异步加载接口
        /// </summary>
        /// <param UIName="path"></param>
        /// <param UIName="resObj"></param>
        /// <param UIName="dealFinish"></param>
        /// <param UIName="priority"></param>
        internal void AsyncLoadResource(string path, ResLoadMode mode, ResouceObj resObj, OnAsyncFinish dealFinish,
                                        LoadResPriority priority)
        {
            ResItem item = GetCacheResouceItem(resObj.Crc);

            if (item != null)
            {
                resObj.ResItem = item;
                if (dealFinish != null)
                {
                    dealFinish(path, resObj);
                }
                return;
            }

            //判断是否在加载中
            AsyncLoadResParam param = null;

            if (!_LoadingAssetDic.TryGetValue(resObj.Crc, out param) || param == null)
            {
                param     = _AsyncLoadResParamPool.Spawn(true);
                param.Crc = resObj.Crc;
                if (mode == ResLoadMode.Ab)
                {
                    param.LoadMode = LoadResMode.AssetBundle;
                }
                else
                {
                    param.LoadMode = LoadResMode.Resource;
                }
                param.Path     = path;
                param.Priority = priority;
                _LoadingAssetDic.Add(resObj.Crc, param);
                _LoadingAssetList[(int)priority].Add(param);
            }

            //回调列表里面加回调
            AsyncCallBack callBack = _AsyncCallBackPool.Spawn(true);

            callBack.OnFinish = dealFinish;
            callBack.ResObj   = resObj;
            param.CallBackList.Add(callBack);
        }
        /// <summary>
        /// 异步加载
        /// </summary>
        /// <param name="path"></param>
        /// <param name="fealFinish"></param>
        /// <param name="priority"></param>
        /// <param name="setSceneObj"></param>
        /// <param name="param1"></param>
        /// <param name="param2"></param>
        /// <param name="param3"></param>
        /// <param name="bClear"></param>
        public long InstantiateObjectAsync(string path, OnAsyncFinish dealFinish, LoadResPriority priority, bool setSceneObj = false,
                                           bool bClear = true, params object[] paramList)
        {
            if (string.IsNullOrEmpty(path))
            {
                return(0);
            }

            uint crc = Crc32.GetCrc32(path);
            //从缓存池获取
            ResourceObj resObj = GetObjectFromPool(crc);

            //从缓存中拿到了,直接返回
            if (resObj != null)
            {
                if (setSceneObj)
                {
                    resObj.m_CloneObj.transform.SetParent(SceneTrs, false);
                }

                if (dealFinish != null)
                {
                    dealFinish(path, resObj.m_CloneObj, paramList);
                }

                return(resObj.m_Guid);
            }

            //异步加载的GUID
            long guid = ResourceManager.Instance.CreateGuid();

            //缓存中没有,异步加载
            resObj                  = m_ResObjClassPool.Spawn(true); //new一个对象
            resObj.m_Crc            = crc;
            resObj.m_SetSceneParent = setSceneObj;
            resObj.m_bClear         = bClear;
            resObj.m_DealFinish     = dealFinish;
            resObj.m_Params         = paramList;

            //调用ResourceManager的异步加载接口
            ResourceManager.Instance.AsyncLoadResource(path, resObj, OnLoadResObjFinish, priority);
            return(guid);
        }
示例#22
0
        /// <summary>
        /// 异步对象加载
        /// </summary>
        public long InstantiateObjectAsync(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority,
                                           bool setSceneObject = false, object param1 = null, object param2 = null, object param3 = null,
                                           bool bClear         = true)
        {
            if (string.IsNullOrEmpty(path))
            {
                return(0);
            }

            uint        crc    = CRC32.GetCRC32(path);
            ResourceObj resObj = GetObjectFromPool(crc);

            if (resObj != null)
            {
                if (setSceneObject)
                {
                    resObj.m_CloneObj.transform.SetParent(SceneTrs, false);
                }

                if (dealFinish != null)
                {
                    dealFinish(path, resObj.m_CloneObj, param1, param2, param3);
                }
                return(resObj.m_Guid);
            }

            long guid = ResourceManager.Instance.CreateGUID();

            resObj                  = m_ResourceObjClassPool.Spawn(true);
            resObj.m_Crc            = crc;
            resObj.m_setSceneParent = setSceneObject;
            resObj.m_bClear         = bClear;
            resObj.m_DealFnish      = dealFinish;

            resObj.m_param1 = param1;
            resObj.m_param2 = param2;
            resObj.m_param3 = param3;

            //调用ResourceManager异步加载接口
            ResourceManager.Instance.AsyncLoadResource(path, resObj, OnLoadResourceObjFinish, priority);

            return(guid);
        }
        /// <summary>
        /// 异步加载资源(仅仅是不需要实例化的资源,例如texture,音频等等)
        /// </summary>
        public void AsyncLoadResource(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority, bool isSprite = false, object param1 = null,
                                      object param2 = null, object param3 = null, uint crc = 0)
        {
            if (crc == 0)
            {
                crc = CRC32.GetCRC32(path);
            }

            ResourceItem item = GetCacheResourceItem(crc);

            if (item != null)
            {
                if (dealFinish != null)
                {
                    dealFinish(path, item.m_Obj, param1, param2, param3);
                }
                return;
            }

            //判断是否在加载中
            AsynvLoadResParam para = null;

            if (!m_LodingAssetDic.TryGetValue(crc, out para) || para == null)
            {
                para             = m_AsyncLoadResParamPool.Spawn(true);
                para.m_Crc       = crc;
                para.m_Path      = path;
                para.m_SpriteBoo = isSprite;
                para.m_Priority  = priority;
                m_LodingAssetDic.Add(crc, para);
                m_LoadingAssetList[(int)priority].Add(para);
            }

            //往回调列表里加回调
            //这里加的是不针对的回调
            ResMgrAsyncCallBack callBack = m_AsyncCallBackPool.Spawn(true);

            callBack.m_ResDealFinish = dealFinish;
            callBack.m_Param1        = param1;
            callBack.m_Param2        = param2;
            callBack.m_Param3        = param3;
            para.m_CallBackList.Add(callBack);
        }
示例#24
0
        /// <summary>
        /// 异步加载资源(仅仅是不需要实例化的资源,如音频,图片等等)
        /// </summary>
        public void AsynLoadResource(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority, object p1 = null, object p2 = null, object p3 = null, uint crc = 0)
        {
            if (crc == 0)
            {
                crc = CRC32.GetCRC32(path);
            }

            ResourceItem item = GetCacheResourrceItem(crc);


            if (item != null)
            {
                if (dealFinish != null)
                {
                    dealFinish(path, item.m_Obj, p1, p2, p3);
                }
                return;
            }

            //判断是否在加载中
            AsyncLoadResParam para = null;

            if (!m_LoadingAssetDic.TryGetValue(crc, out para) || para == null)
            {
                para            = m_AsyncLoadResParamPool.Spawn(true);
                para.m_Crc      = crc;
                para.m_Path     = path;
                para.m_Priority = priority;

                m_LoadingAssetDic.Add(crc, para);
                m_LoadingAssetList[(int)priority].Add(para);
            }

            //往回调列表里面添加回调
            AsyncCallBack callBack = m_AsyncCallBackPool.Spawn(true);

            callBack.m_DealFinish = dealFinish;
            callBack.m_Param1     = p1;
            callBack.m_Param2     = p2;
            callBack.m_Param3     = p3;
            para.m_CallBackList.Add(callBack);
        }
        /// <summary>
        /// 异步加载资源(仅仅是不需要实例化的资源,例如音频,图片等)
        /// </summary>
        /// <param name="path"></param>
        /// <param name="dealFinish"></param>
        /// <param name="priority"></param>
        /// <param name="param1"></param>
        /// <param name="param2"></param>
        /// <param name="param3"></param>
        /// <param name="crc"></param>
        public void AsyncLoadResouce(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority, bool isSprite = false, object param1 = null, object param2 = null, object param3 = null, uint crc = 0)
        {
            if (crc == 0)
            {
                crc = CRC32.GetCRC32(path);
            }
            TResouceItem item = GetCacheResouceItem(crc);

            if (item != null)
            {
                if (dealFinish != null)
                {
                    dealFinish(path, item.Obj, param1, param2, param3);
                }
                return;
            }
            //判断是否在加载中
            TAsyncLoadResParam para = null;

            if (!mLoadingAssetDic.TryGetValue(crc, out para) || para == null)
            {
                para          = mAsyncLoadResParamPool.Allocate();
                para.Crc      = crc;
                para.Path     = path;
                para.IsSprite = isSprite;
                para.Priority = priority;
                mLoadingAssetDic.Add(crc, para);
                mLoadingAssetList[(int)priority].Add(para);
            }
            //往回调列表里面加回调
            TAsyncCallBack callBack = mAsyncCallBackPool.Allocate();

            callBack.DealObjFinish = dealFinish;

            callBack.Param1 = param1;
            callBack.Param2 = param2;
            callBack.Param3 = param3;
            para.CallbackList.Add(callBack);
        }
示例#26
0
    public void AsyncLoadResource(string path, OnLoadResFinish dealFinish, LoadResPriority priority,
                                  object param1 = null, object param2 = null, object param3 = null, uint crc = 0)
    {
        if (crc == 0)
        {
            crc = Crc32.GetCrc32(path);
        }

        var item = GetCacheResourceItem(crc);

        if (item != null)
        {
            dealFinish?.Invoke(path, item.m_Obj, param1, param2, param3);

            return;
        }
        //判断是否在加载中
        AsyncLoadResInfo para = null;

        if (!m_LoadingAssetDic.TryGetValue(crc, out para) || para == null)
        {
            para            = m_AsyncLoadResParamPool.Spawn();
            para.m_Crc      = crc;
            para.m_Path     = path;
            para.m_Priority = priority;
            m_LoadingAssetDic.Add(crc, para);
            m_LoadingAssetList[(int)priority].Add(para);
        }

        //往回调列表里面加回调
        var callBack = m_AsyncCallBackPool.Spawn();

        callBack.m_DealFinish = dealFinish;
        callBack.m_Param1     = param1;
        callBack.m_Param2     = param2;
        callBack.m_Param3     = param3;
        para.m_CallBackList.Add(callBack);
    }
示例#27
0
    /// <summary>
    /// 异步加载资源,仅仅是不需要实例化的资源,例如音频,图片等等
    /// </summary>
    public void AsyncLoadResource(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority, uint crc = 0, object param1 = null, object param2 = null, object param3 = null)
    {
        if (crc == 0)
        {
            crc = CRC32.GetCRC32(path);
        }
        ResourceItem item = GetCancheResourceItem(crc);

        if (item != null)
        {
            if (dealFinish != null)
            {
                dealFinish(path, item._obj, param1, param2, param3);
            }
            return;
        }
        //判断是否在加载中
        AsyncLoadResParam param = null;

        if (!_loadingAssetDic.TryGetValue(crc, out param) || param == null)
        {
            param          = _asyncLoadResParamPool.Spawn(true);
            param.crc      = crc;
            param.path     = path;
            param.priority = priority;
            _loadingAssetDic.Add(crc, param);
            _loadingAssetList[(int)priority].Add(param);
        }

        //往回调列表里面加回调
        AsyncCallBack callBack = _asyncCallBackPool.Spawn(true);

        callBack.dealFinish = dealFinish;
        callBack.param1     = param1;
        callBack.param2     = param2;
        callBack.param3     = param3;
        param.callBackList.Add(callBack);
    }
示例#28
0
        /// <summary>
        /// 异步加载
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="resType"></param>
        /// <param name="assetPath"></param>
        /// <param name="loadFinish"></param>
        /// <param name="isSprite"></param>
        /// <param name="DestroyCache">当ResLoader被销毁时是否从内存中释放</param>
        /// <param name="loadResPriority">加载的优先级</param>
        public void LoadAsync <T>(ResFromType resType, string assetPath, System.Action <bool, ResInfo> loadFinish,
                                  bool isSprite = false, bool DestroyCache = false, LoadResPriority loadResPriority = LoadResPriority.RES_NUM)
            where T : Object
        {
            if (CheckNoCanLoad())
            {
                AFLogger.e("此Loader已经被释放,请注意!");
                return;
            }
            ResLoadInfo resLoadInfo = ResLoadInfo.Allocate(resType, assetPath, isSprite, AsyncResCallBack, loadFinish, DestroyCache);

            //添加回调函数
            if (mAsyncLoadingResDic.ContainsKey(resLoadInfo.mResPath))
            {
                mAsyncLoadingResDic[resLoadInfo.mResPath].Add(resLoadInfo);
            }
            else
            {
                AsyncCount += 1;
                mAsyncLoadingResDic.AddValue(resLoadInfo.mResPath, resLoadInfo);
                ResManager.Instance.LoadAsync(resLoadInfo);
            }
        }
示例#29
0
        /// <summary>
        /// 异步加载Prefab
        /// </summary>
        /// <param name="resType"></param>
        /// <param name="assetPath"></param>
        /// <param name="parTrans"></param>
        /// <param name="loadObjFinish"></param>
        /// <param name="loadResPriority"></param>
        /// <param name="bClear"></param>
        public void InstantiateObjectASync(ResFromType resType, string assetPath, System.Action <bool, ResObject> loadObjFinish,
                                           Transform parTrans = null, LoadResPriority loadResPriority = LoadResPriority.RES_NUM,
                                           bool bClear        = true)
        {
            if (CheckNoCanLoad())
            {
                AFLogger.e("此Loader已经被释放,请注意!");
                return;
            }
            ObjLoadInfo objLoadInfo = ObjLoadInfo.Allocate(resType, assetPath, parTrans, bClear, loadResPriority,
                                                           AsyncObjCallBack, loadObjFinish);

            if (mAsyncLoadingObjDic.ContainsKey(assetPath))
            {
                mAsyncLoadingObjDic[assetPath].Add(objLoadInfo);
            }
            else
            {
                AsyncCount += 1;
                mAsyncLoadingObjDic.AddValue(assetPath, objLoadInfo);
                ResManager.Instance.InstantiateObjectASync(objLoadInfo);
            }
        }
示例#30
0
        /// <summary>
        /// 针对ObjectManager的异步加载接口
        /// </summary>
        public void AsyncLoadResource(string path, ResourceObj resObj, OnAsyncFinish dealFinish,
                                      LoadResPriority priority)
        {
            ResourceItem item = GetCacheResourrceItem(resObj.m_Crc);

            if (item != null)
            {
                resObj.m_ResItem = item;
                if (dealFinish != null)
                {
                    dealFinish(path, resObj);
                }
            }

            //判断是否在加载中
            AsyncLoadResParam para = null;

            if (!m_LoadingAssetDic.TryGetValue(resObj.m_Crc, out para) || para == null)
            {
                para            = m_AsyncLoadResParamPool.Spawn(true);
                para.m_Crc      = resObj.m_Crc;
                para.m_Path     = path;
                para.m_Priority = priority;

                m_LoadingAssetDic.Add(resObj.m_Crc, para);
                m_LoadingAssetList[(int)priority].Add(para);
            }


            //往回调列表里面添加回调
            AsyncCallBack callBack = m_AsyncCallBackPool.Spawn(true);

            callBack.m_DealFinish = dealFinish;
            callBack.m_ResObj     = resObj;

            para.m_CallBackList.Add(callBack);
        }