private AssetBundle LoadAssetBundle(string ABName) { AssetBundleItem item = null; uint crc = Crc32.GetCrc32(ABName); if (mAssetBundleItemDic.TryGetValue(crc, out item) && item != null) { item.Retain(); } else { AssetBundle assetBundle = null; string fullPath = ABDataHolder.Instance.GetABPrefix() + ABName; if (ABDataHolder.Instance.JudgeCanLoadAB(fullPath)) { assetBundle = AssetBundle.LoadFromFile(fullPath); } else { AFLogger.e("不存在AB包路径 :" + ABName + " " + fullPath); } if (assetBundle == null) { AFLogger.e(" Load AssetBundle Error:" + ABName + " " + fullPath); } item = SafeObjectPool <AssetBundleItem> .Instance.Allocate(); item.assetBundle = assetBundle; item.Retain(); mAssetBundleItemDic.Add(crc, item); } return(item.assetBundle); }
public void CacheAssetbundle(uint crc, AssetBundleItem assetBundleItem) { if (mAssetBundleItemDic.ContainsKey(crc)) { mAssetBundleItemDic[crc].Retain(); } else { mAssetBundleItemDic.Add(crc, assetBundleItem); } }
private void UnLoadAssetBundle(string ABName) { AssetBundleItem item = null; uint crc = Crc32.GetCrc32(ABName); if (mAssetBundleItemDic.TryGetValue(crc, out item) && item != null) { item.Release(); if (item.RefCount <= 0 && item.assetBundle != null) { item.assetBundle.Unload(true); item.Recycle2Cache(); SafeObjectPool <AssetBundleItem> .Instance.Recycle(item); mAssetBundleItemDic.Remove(crc); } } }