/// <summary> /// 释放资源 /// </summary> /// <param name="assetName"></param> public void ReleaseAsset(string assetName) { CMAsset cmasset = null; if (TryGetAsset(assetName, out cmasset)) { cmasset.RemoveRef(); } }
/// <summary> /// 卸载资源 /// </summary> /// <param name="assetName"></param> public void UnloadAsset(string assetName) { CMAsset cmasset = null; if (TryGetAsset(assetName, out cmasset)) { m_dicAssets.Remove(assetName); DataManager.Manager <CMAssetBundleLoaderMgr>().RemoveDependenceAssetRef(assetName); //Engine.Utility.Log.Info("CmAssetBundle->UnloadAsset {0}", assetName); } }
/// <summary> /// 引用资源 /// </summary> /// <param name="assetName">资源名称</param> public void ReferenceAssset(string assetName) { //if (!IsDone()) //{ // Debug.LogError(string.Format("CMAssetBundle {0} Not Ready ",assetName)); // return ; //} CMAsset cmasset = null; if (!TryGetAsset(assetName, out cmasset)) { cmasset = new CMAsset(assetName, this); m_dicAssets.Add(assetName, cmasset); } cmasset.AddRef(); }
/// <summary> /// 回调资源加载完成 /// </summary> /// <param name="assetName"></param> private void InvokeAssetLoadDlg(string assetName) { List <CMAssetLoadFinsh> callbacks = null; if (m_dicLoadAssetDlg.TryGetValue(assetName, out callbacks)) { CMAsset cmasset = null; if (TryGetAsset(assetName, out cmasset)) { for (int i = 0, max = callbacks.Count; i < max; i++) { if (null == callbacks[i].FinshDlg) { continue; } callbacks[i].FinshDlg.Invoke(cmasset.Asset, callbacks[i].Param1, callbacks[i].Param2, callbacks[i].Param3); } } m_dicLoadAssetDlg.Remove(assetName); } }
/// <summary> /// 创建资源(同步) /// </summary> public UnityEngine.Object CreateAsset(string assetName) { CMAsset cmasset = null; UnityEngine.Object obj = null; if (IsDone() && null != m_ab && (!TryGetAsset(assetName, out cmasset) || !cmasset.Ready)) { obj = m_ab.LoadAsset(assetName); } else if (null != cmasset && cmasset.Ready) { obj = cmasset.Asset; } //对本身添加引用计数 ReferenceAssset(assetName); if (null != obj) { OnAssetLoaded(assetName, obj); InvokeAssetLoadDlg(assetName); } return(obj); }
/// <summary> /// 资源加载完成 /// </summary> /// <param name="assetName">资源名称</param> /// <param name="assetObj">资源对象</param> private void OnAssetLoaded(string assetName, UnityEngine.Object assetObj) { CMAsset cmA = null; bool needInit = false; if (!m_dicAssets.TryGetValue(assetName, out cmA)) { needInit = true; cmA = new CMAsset(assetName, this); m_dicAssets.Add(assetName, cmA); } else if (!cmA.Ready) { needInit = true; } if (needInit) { cmA.InitAsset(assetObj); //对依赖资源添加引用计数 ReferenceDependenceAssset(assetName); } }
/// <summary> /// 尝试获取资源 /// </summary> /// <param name="assetName"></param> /// <param name="assetObj"></param> /// <returns></returns> private bool TryGetAsset(string assetName, out CMAsset cmasset) { return(m_dicAssets.TryGetValue(assetName, out cmasset)); }