public void CleanAllUsing() { if (_usingAsset == null) { return; } for (int i = _usingAsset.Count - 1; i >= 0; i--) { BaseAsset ba = _usingAsset[i]; if (!AssetProcessor.ProcessDestroy(ba)) { continue; } if (ba.Resource != null) { ResService.UnloadResource(ba.Resource); ba.Resource = null; } ba.BaseData.Factory.DestroyObject(ba); // _usingAsset.RemoveAt(i); } }
/// <summary> /// 卸载 /// </summary> /// <param name="ba">资源</param> public void Unload(BaseAsset ba) { if (ba == null) { return; } if (_assetManager != null) { _assetManager.Unload(ba, SingletonState == SingletonStateEnum.Destroying); } else { if (!AssetProcessor.ProcessDestroy(ba)) { return; } if (ba.Resource != null) { ResService.UnloadResource(ba.Resource); ba.Resource = null; } ba.BaseData.Factory.DestroyObject(ba); } }
/// <summary> /// 清理 /// </summary> /// <param name="uiState">保留的UI状态名</param> public void Clear(JWArrayList <string> uiState) { if (uiState == null) { JW.Common.Log.LogE("AssetCache.ClearCache : invalid parameter"); return; } Dictionary <string, JWArrayList <BaseAsset> > .Enumerator enumerator = _assets.GetEnumerator(); while (enumerator.MoveNext()) { JWArrayList <BaseAsset> val = enumerator.Current.Value; if (val == null) { continue; } for (int i = val.Count - 1; i >= 0; i--) { BaseAsset ba = val[i]; if (ba == null) { val.RemoveAt(i); continue; } if (!AssetAssistor.IsAssetDead(ref ba.BaseData, uiState)) { continue; } if (AssetProcessor.ProcessDestroy(ba)) { if (ba.Resource != null) { ResService.UnloadResource(ba.Resource); ba.Resource = null; } ba.BaseData.Factory.DestroyObject(ba); } else { JW.Common.Log.LogE("AssetCache.ClearCache : failed to process Destroy - {0}", ba.BaseData.Name); } val.RemoveAt(i); } } }
/// <summary> /// 卸载 /// </summary> /// <param name="ba">待卸载的资产</param> /// <param name="forceDestroy">是否强制销毁</param> public void Unload(BaseAsset ba, bool forceDestroy = false) { if (ba == null) { JW.Common.Log.LogE("AssetManager.Unload : invalid parameter"); return; } int found = _usingAsset.IndexOf(ba); if (found == -1) { JW.Common.Log.LogE("AssetManager.Unload : can't find asset - {0}", ba.BaseData.Name); return; } _usingAsset.RemoveAt(found); //销毁手动和Imediate if (forceDestroy || ba.BaseData.Life == LifeType.Immediate || ba.BaseData.Life == LifeType.Manual) { if (!AssetProcessor.ProcessDestroy(ba)) { return; } if (ba.Resource != null) { ResService.UnloadResource(ba.Resource); ba.Resource = null; } ba.BaseData.Factory.DestroyObject(ba); } else { _cache.AddAsset(ba); } }