public void Destroy() { m_Cache.Destroy(); // 清理掉加载队列 for (int i = 0; i < m_LoadingResList.Length; i++) { var stack = m_LoadingResList[i]; while (stack.Count > 0) { AsyncLoadProcess process = stack.Pop(); process.Reset(); m_ProcessPool.Recycle(process); } } UnRegisterTick(); }
private void Update() { if (m_CurrentLoadingCount >= m_MaxLoadingCount) { return; } for (int i = 0; i < m_LoadingResList.Length; i++) { Stack <AsyncLoadProcess> processStack = m_LoadingResList[i]; while (processStack.Count > 0) { if (m_CurrentLoadingCount >= m_MaxLoadingCount) { return; } m_CurrentLoadingCount++; AsyncLoadProcess param = processStack.Pop(); param.BeginLoad(); } } }
public void LoadAsync(string assetPath, Action <AssetItem> call, LoadPriority priority = LoadPriority.Hight) { // 已加载 if (m_Cache.IsHaveAsset(assetPath)) { AssetItem item = m_Cache.Load(assetPath); call?.Invoke(item); } // 加载中 else if (m_LoadingResDict.ContainsKey(assetPath)) { m_LoadingResDict[assetPath].AddCallback(call); } // 从头加载 else { AsyncLoadProcess param = m_ProcessPool.Spawn(); param.Init(assetPath, this, priority); param.AddCallback(call); m_LoadingResDict.Add(assetPath, param); m_LoadingResList[(int)priority].Push(param); } }