public void Reset() { Path = ""; Crc = 0; IsSprite = false; Priority = AsyncLoadPriority.Low; CallBackList.Clear(); }
/// <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; }
/// <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); }