/// <summary> /// 获取所有正在请求加载资产关联的 的UI状态名 /// </summary> /// <param name="uiStateName">返回UI状态名</param> public void GetUIState(ref JWArrayList <string> uiStateName) { for (int i = 0; i < _resourceRequesting.Count; i++) { LoadData loadData = _resourceRequesting[i]; if (loadData.Data.Life == LifeType.UIState && !string.IsNullOrEmpty(loadData.Data.StateName) && uiStateName.IndexOf(loadData.Data.StateName, StringComparer.OrdinalIgnoreCase) == -1) { uiStateName.Add(loadData.Data.StateName); } } for (int i = 0; i < _data.Count; i++) { AssetData data = _data[i]; if (data.Priority == LoadPriority.Wait) { continue; } if (data.Life == LifeType.UIState && !string.IsNullOrEmpty(data.StateName) && uiStateName.IndexOf(data.StateName, StringComparer.OrdinalIgnoreCase) == -1) { uiStateName.Add(data.StateName); } } }
/// <summary> /// 根据UI状态判断资产是否失效 /// </summary> /// <param name="data">资产记录数据</param> /// <param name="uiState">UI状态</param> /// <returns></returns> public static bool IsAssetDead(ref AssetData data, JWArrayList <string> uiState) { if (uiState == null) { JW.Common.Log.LogE("AssetHelper.IsAssetDead : invalid parameter"); return(false); } if (data.Life == LifeType.Resident) { return(false); } if (data.Life == LifeType.Manual) { return(false); } if (data.Life == LifeType.UIState && !string.IsNullOrEmpty(data.StateName) && uiState.IndexOf(data.StateName, StringComparer.OrdinalIgnoreCase) != -1) { return(false); } return(true); }
/// <summary> /// 获取所有的UI状态名 /// </summary> /// <param name="uiStateName">返回UI状态名</param> public void GetUIState(ref JWArrayList <string> uiStateName) { Dictionary <string, JWArrayList <BaseAsset> > .Enumerator enumerator = _assets.GetEnumerator(); while (enumerator.MoveNext()) { JWArrayList <BaseAsset> val = enumerator.Current.Value; if (val == null) { continue; } for (int i = 0; i < val.Count; i++) { BaseAsset ba = val[i]; if (ba == null || ba.BaseData.Life != LifeType.UIState || string.IsNullOrEmpty(ba.BaseData.StateName)) { continue; } if (uiStateName.IndexOf(ba.BaseData.StateName, StringComparer.OrdinalIgnoreCase) == -1) { uiStateName.Add(ba.BaseData.StateName); } } } }
/// <summary> /// 清理缓存的资源 /// </summary> /// <param name="uiStateHistory">UI状态历史列表(=null标识没有UI状态)</param> public void ClearUIStateCache(JWArrayList <string> uiStateHistory) { if (_loader == null) { return; } _tempList.Clear(); _tempList2.Clear(); if (uiStateHistory != null) { _assetManager.GetCacheUIState(ref _tempList); _loader.GetUIState(ref _tempList); for (int i = uiStateHistory.Count - 1; i >= 0; i--) { string stateName = uiStateHistory[i]; if (string.IsNullOrEmpty(stateName) || _tempList.IndexOf(stateName, StringComparer.OrdinalIgnoreCase) == -1) { continue; } _tempList2.Add(stateName); if (_tempList2.Count == CacheUIStateCount) { break; } } } _assetManager.ClearCache(_tempList2); _loader.ClearTask(_tempList2); if (AlwaysGc) { if (LuaGCHook != null) { LuaGCHook(true); } ResService.GetInstance().UnloadUnusedAssets(); return; } }
/// <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); } }