//根据单个AbName 加载AB private AssetBundle LoadAssetBundle(string assetBundleName) { MAssetBundleItem assetBundleItem = null; uint crc = MCrcHelper.GetCRC32(assetBundleName); if (!m_assetBundleItemDic.TryGetValue(crc, out assetBundleItem)) { AssetBundle assetBundle = null; string fullPath = MPathUtils.ASSETBUNDLE_PATH + "/" + assetBundleName; if (File.Exists(fullPath)) { assetBundle = AssetBundle.LoadFromFile(fullPath); } if (assetBundle == null) { MDebug.singleton.AddErrorLog("没有找到这个AssetBundle " + assetBundleName); } assetBundleItem = m_assetBundleItemPool.Spawn(true); assetBundleItem.assetBundle = assetBundle; assetBundleItem.refCount++; m_assetBundleItemDic.Add(crc, assetBundleItem); } else { assetBundleItem.refCount++; } return(assetBundleItem.assetBundle); }
//释放单个Ab资源 private void UnLoadAssetBundle(string assetBundleName) { MAssetBundleItem mAssetBundleItem = null; uint crc = MCrcHelper.GetCRC32(assetBundleName); if (m_assetBundleItemDic.TryGetValue(crc, out mAssetBundleItem)) { mAssetBundleItem.refCount--; if (mAssetBundleItem.refCount <= 0 && mAssetBundleItem.assetBundle != null) { mAssetBundleItem.assetBundle.Unload(true); mAssetBundleItem.Reset(); m_assetBundleItemPool.Recycle(mAssetBundleItem); m_assetBundleItemDic.Remove(crc); } } }