private static UnloadAssetInfo MakeUseLogic(string assetName, AssetsData assets = null, bool isHaveDependencies = true) { UnloadAssetInfo info = null; if (noUsedAssetsDic.ContainsKey(assetName)) { info = noUsedAssetsDic[assetName]; noUsedAssetsDic.Remove(assetName); if (noUsedAssetsList.Contains(info)) { noUsedAssetsList.Remove(info); } usedAssetsDic.Add(assetName, info); } else if (usedAssetsDic.ContainsKey(assetName)) { info = usedAssetsDic[assetName]; } else { info = new UnloadAssetInfo(isHaveDependencies, assets); usedAssetsDic.Add(assetName, info); //noUsedAssetsList.Add(info); } if (assets != null) { info.assets = assets; } info.useTimes++; return(info); }
public static void UnloadOne() { if (noUsedAssetsList.Count > 0) { UnloadAssetInfo info = noUsedAssetsList[0]; noUsedAssetsList.RemoveAt(0); if (unloadBundleQue.ContainsKey(info.assetsName)) { unloadBundleQue.Remove(info.assetsName); } ResourcesManager.ReleaseByPath(info.assets.assetPath); } }
/// <summary> /// 记录资源的加载 /// </summary> /// <param name="assets"></param> public static void MarkUseAssets(AssetsData assets, bool isHaveDependencies) { if (assets == null) { return; } UnloadAssetInfo info = MakeUseLogic(assets.assetName, assets, isHaveDependencies); //无依赖的资源进入卸载Bundle压缩包的队列 //if (assets.AssetBundle != null && !isHaveDependencies) //{ // info.unloadBundleTime = 5; // if (!unloadBundleQue.ContainsKey(info.assetsName)) // unloadBundleQue.Add(info.assetsName, info); //} }
private static int SortNoUsedAssetsInfo(UnloadAssetInfo x, UnloadAssetInfo y) { //自资源废弃到现在的时间 / 资源使用次数 float freqX = x.GetFrequency(); float freqY = y.GetFrequency(); if (freqX < freqY) { return(1); } else if (freqX > freqY) { return(-1); } return(0); }
/// <summary> /// 当资源在游戏中无引用时,传过来记录 /// </summary> /// <param name="assets"></param> public static void DiscardAssets(AssetsData assets) { if (!usedAssetsDic.ContainsKey(assets.assetName)) { //Debug.LogError("资源未加载=>:" + assets.assetPath); return; } UnloadAssetInfo info = null; info = usedAssetsDic[assets.assetName]; usedAssetsDic.Remove(assets.assetName); info.discardTime = Time.realtimeSinceStartup; noUsedAssetsDic.Add(info.assetsName, info); noUsedAssetsList.Add(info); noUsedAssetsList.Sort(SortNoUsedAssetsInfo); }