示例#1
0
 public void Reset()
 {
     Path     = "";
     Crc      = 0;
     IsSprite = false;
     Priority = AsyncLoadPriority.Low;
     CallBackList.Clear();
 }
示例#2
0
    /// <summary>
    /// 异步加载sprite
    /// </summary>
    /// <param name="path"></param>
    /// <param name="targetImg"></param>
    /// <param name="priority"></param>
    /// <param name="isSetNativeSize"></param>
    public void AsyncLoadSprite(string path, Image targetImg, AsyncLoadPriority priority = AsyncLoadPriority.Middile, bool isSetNativeSize = false)
    {
        if (targetImg == null)
        {
            return;
        }

        ResourcesManager.Instance.AsyncLoadResource(path, AsyncLoadSpriteFinish, priority, true, targetImg, isSetNativeSize);
    }
    public void Reset()
    {
        Crc        = 0;
        ABDataItem = null;
        CloneGo    = null;
        GoGuid     = 0;
        IsClear    = true;
        IsRecycle  = false;

        //------------------------
        CancelId     = 0;
        IsSetSceneTr = false;
        Priority     = AsyncLoadPriority.Low;
        DealFinish   = null;
        Param1       = null;
        Param2       = null;
        Param3       = null;
    }
示例#4
0
    /// <summary>
    /// 异步加载资源, 仅加载不需要实例化的资源, 音频,图片等
    /// </summary>
    public void AsyncLoadResource(string path, AsyncLoadDealFinish dealFinish, AsyncLoadPriority priority, bool isSprite = false,
                                  object param1 = null, object param2 = null, object param3 = null, uint pathCrc = 0)
    {
        if (pathCrc == 0)
        {
            pathCrc = Crc32.GetCRC32(path);
        }
        //这里跟同步加载一样,缓存列表中有的话就直接取出来就行了, 然后把path,obj还有相应的参数传给回调就行了
        AssetBundleDataItem dataItem = GetCacheABDataItem(pathCrc);

        if (dataItem != null && dataItem.Obj != null)
        {
            if (dealFinish != null)
            {
                dealFinish(path, dataItem.Obj, param1, param2, param3);
            }
            return;
        }

        //缓存列表中没有时,才进行异步加载
        AsyncLoadDataItem asyncDataItem = null;

        if (!m_asyncLoadingItemDic.TryGetValue(pathCrc, out asyncDataItem) && asyncDataItem == null)
        {
            //初始化数据类
            asyncDataItem          = m_asyncDataItemPool.Create(true);
            asyncDataItem.Path     = path;
            asyncDataItem.Crc      = pathCrc;
            asyncDataItem.IsSprite = isSprite;
            asyncDataItem.Priority = priority;
            m_asyncLoadItemListArray[(int)priority].Add(asyncDataItem);   //加到优先级列表数组中
            m_asyncLoadingItemDic.Add(pathCrc, asyncDataItem);            //加到正在加载的dic中
        }
        //不论正在异步加载的dic(m_asyncLoadingItemDic)中有没有asyncDataItem, 都要进行回调列表的追加
        AsyncLoadCallBack callBack = m_asyncCallBackPool.Create(true);

        callBack.DealFinish = dealFinish;
        callBack.Param1     = param1;
        callBack.Param2     = param2;
        callBack.Param3     = param3;
        asyncDataItem.CallBackList.Add(callBack);
    }
    /// <summary>
    /// 异步加载实例化对象
    /// </summary>
    /// <param name="path"></param>
    /// <param name="dealFinish">外层调用时传入的加载完成回调</param>
    /// <param name="priority"></param>
    /// <param name="isSetSceneTr">是否设置到场景节点</param>
    /// <param name="param1"></param>
    /// <param name="param2"></param>
    /// <param name="param3"></param>
    /// <param name="isClear">是否跳转场景销毁/清除</param>
    public long AsyncInstantiateGameObj(string path, AsyncLoadDealFinish dealFinish, AsyncLoadPriority priority, bool isSetSceneTr = false,
                                        object param1 = null, object param2 = null, object param3 = null, bool isClear = true)
    {
        uint pathCrc             = Crc32.GetCRC32(path);
        ResourceGameObject resGo = GetResGoFromRecycleDic(pathCrc);

        if (resGo != null)
        {
            if (isSetSceneTr)
            {
                resGo.CloneGo.transform.SetParent(SceneTr);
            }

            if (dealFinish != null)
            {
                dealFinish(path, resGo.CloneGo, param1, param2, param3);
            }

            return(resGo.CancelId);
        }

        resGo              = m_resGoClassPool.Create(true);
        resGo.Crc          = pathCrc;
        resGo.IsClear      = isClear;
        resGo.IsSetSceneTr = isSetSceneTr;
        resGo.Priority     = priority;
        resGo.DealFinish   = dealFinish;
        resGo.Param1       = param1;
        resGo.Param2       = param2;
        resGo.Param3       = param3;
        ResourcesManager.Instance.AsyncLoadResource(path, resGo, OnAsyncLoadResGoDealFinish);

        resGo.CancelId = CreateCancelId();
        m_cancelIdResGoDic.Add(CancelId, resGo);

        return(resGo.CancelId);
    }