public void ReleaseCurAssetCat() { if (curAssetCat != null) { if (!curAssetCat.IsLoadSuccess()) { curAssetCat.RemoveCallback(this); } curAssetCat.SubRefCount(1, true); } curAssetPath = null; curAssetCat = null; }
public void CancelLoadAllCallback(AssetCat assetCat) { foreach (var keyValue in assetCatDict[assetCat]) { var callbackCause = keyValue.Value; if (callbackCause.Equals(NullUtil.GetDefaultString())) { this.resLoad.CancelLoadCallback(assetCat, null); } else { this.resLoad.CancelLoadCallback(assetCat, callbackCause); } } assetCatDict.Remove(assetCat); }
public void CancelLoadAllCallback(AssetCat assetCat) { if (!assetCatDict.ContainsKey(assetCat)) { return; } foreach (var keyValue1 in assetCatDict) { var callbackCauseDict = keyValue1.Value; foreach (var keyValue2 in callbackCauseDict) { var callbackCause = keyValue2.Key; resLoadComponent.CancelLoadCallback(assetCat, callbackCause.GetNullableKey()); } } assetCatDict.Remove(assetCat); }
private bool __UnLoadUnUseAsset(AssetCat assetCat) { if (assetCat == null) { return(false); } if (!IsAssetLoadSuccess(assetCat.assetPath)) { return(false); } if (assetCat.refCount == 0) { __RemoveAssetCat(assetCat); return(true); } return(false); }
private void __RemoveAssetCat(AssetCat assetCat) { if (assetCat == null) { return; } assetCatDict.RemoveByFunc((key, value) => value == assetCat); if (Application.isEditor && EditorModeConst.IsEditorMode || assetCat.assetPath.Contains(FilePathConst.ResourcesFlag) ) { return; } var assetBundleCat = assetCat.assetBundleCat; //assetBundle_name的dependencies的引用-1 assetBundleCat?.SubRefCountOfDependencies(); //减少一个assetBundle对asset的引用 assetBundleCat?.SubRefCount(); }
// 加载某个资源 public AssetCat GetOrLoadAsset(string assetPath, Action <AssetCat> onLoadSuccessCallback = null, Action <AssetCat> onLoadFailCallback = null, Action <AssetCat> onLoadDoneCallback = null, object callbackCause = null) { AssetCat assetCat; if (!Application.isPlaying) { #if UNITY_EDITOR Object obj = AssetDatabase.LoadAssetAtPath <Object>(assetPath); if (!resLoadDataInfoDict.ContainsKey(assetPath.GetMainAssetPath())) { assetCat = new AssetCat(assetPath); resLoadDataInfoDict[assetPath.GetMainAssetPath()] = new ResLoadDataInfo(new ResLoadData(assetCat), isNotCheckDestroy); } var resLoadDataInfo = resLoadDataInfoDict[assetPath.GetMainAssetPath()]; if (!resLoadDataInfo.resLoadData.assetCat.assetDict.ContainsKey(obj.name)) { resLoadDataInfo.resLoadData.assetCat.assetDict[obj.name] = new Dictionary <Type, Object>(); } if (!resLoadDataInfo.resLoadData.assetCat.assetDict[obj.name].ContainsKey(obj.GetType())) { resLoadDataInfo.resLoadData.assetCat.assetDict[obj.name][obj.GetType()] = obj; } onLoadSuccessCallback?.Invoke(resLoadDataInfo.resLoadData.assetCat); onLoadDoneCallback?.Invoke(resLoadDataInfo.resLoadData.assetCat); return(resLoadDataInfo.resLoadData.assetCat); #endif } callbackCause = callbackCause ?? this; assetCat = Client.instance.assetBundleManager.GetOrLoadAssetCat(assetPath.GetMainAssetPath(), onLoadSuccessCallback, onLoadFailCallback, onLoadDoneCallback, callbackCause); if (!resLoadDataInfoDict.ContainsKey(assetPath.GetMainAssetPath())) { resLoadDataInfoDict[assetPath.GetMainAssetPath()] = new ResLoadDataInfo(new ResLoadData(assetCat), isNotCheckDestroy); } resLoadDataInfoDict[assetPath.GetMainAssetPath()].AddCallbackCause(callbackCause); return(assetCat); }
public void CancelLoadAllCallbacks(AssetCat assetCat) { string toRemoveKey = null; foreach (var keyValue in resLoadDataInfoDict) { var key = keyValue.Key; var resLoadDataInfo = resLoadDataInfoDict[key]; if (resLoadDataInfo.resLoadData.assetCat == assetCat) { resLoadDataInfo.RemoveAllCallbackCauses(); if (resLoadDataInfo.callbackCauseDict.Count == 0 && !isNotCheckDestroy) //is_not_check_destroy的时候不删除,因为要在destroy的时候作为删除的asset的依据 { toRemoveKey = key; } break; } } if (toRemoveKey != null) { resLoadDataInfoDict.Remove(toRemoveKey); } }
private AssetCat __GetOrAddAssetCat(string assetPath) { assetCatDict.TryGetValue(assetPath, out var targetAssetCat); //编辑器模式下的或者是resouce模式下的,没有找到则创建一个AssetCat if (Application.isEditor && EditorModeConst.IsEditorMode || assetPath.Contains(FilePathConst.ResourcesFlag) ) { Object[] assets = null; if (assetPath.Contains(FilePathConst.ResourcesFlag)) { var resourcePath = assetPath.Substring(assetPath.IndexEndOf(FilePathConst.ResourcesFlag) + 1) .GetMainAssetPath().WithoutSuffix(); assets = Resources.LoadAll(resourcePath); } else { #if UNITY_EDITOR assets = AssetDatabase.LoadAllAssetsAtPath(assetPath); #endif } if (!assets.IsNullOrEmpty()) //有该资源 { targetAssetCat = new AssetCat(assetPath); targetAssetCat.SetAssets(assets); assetCatDict[assetPath] = targetAssetCat; } else { return(null); } } return(targetAssetCat); }
public BaseAssetAsyncLoader LoadAssetAsync(string assetPath, Action <AssetCat> onLoadSuccessCallback = null, Action <AssetCat> onLoadFailCallback = null, Action <AssetCat> onLoadDoneCallback = null, object callbackCause = null) { AssetCat assetCat; if (Application.isEditor && EditorModeConst.IsEditorMode || assetPath.Contains(FilePathConst.ResourcesFlag) ) { assetCat = __GetOrAddAssetCat(assetPath); onLoadSuccessCallback?.Invoke(assetCat); onLoadDoneCallback?.Invoke(assetCat); return(new EditorAssetAsyncLoader(assetCat)); } var assetBundleName = assetPathMap.GetAssetBundleName(assetPath); if (assetBundleName == null) { LogCat.error(string.Format("{0}没有设置成ab包", assetPath)); } if (assetCatDict.ContainsKey(assetPath)) { assetCat = GetAssetCat(assetPath); //已经加载成功 if (assetCat.IsLoadSuccess()) { onLoadSuccessCallback?.Invoke(assetCat); onLoadDoneCallback?.Invoke(assetCat); return(null); } //加载中 assetCat.AddOnLoadSuccessCallback(onLoadSuccessCallback, callbackCause); assetCat.AddOnLoadFailCallback(onLoadFailCallback, callbackCause); assetCat.AddOnLoadDoneCallback(onLoadDoneCallback, callbackCause); return(assetAsyncloaderProcessingList.Find(assetAsyncloader => assetAsyncloader.assetCat.assetPath.Equals(assetPath))); } //没有加载 var assetAsyncLoader = PoolCatManagerUtil.Spawn <AssetAsyncLoader>(); assetCat = new AssetCat(assetPath); __AddAssetCat(assetPath, assetCat); //添加对assetAsyncLoader的引用 assetCat.AddRefCount(); assetCat.AddOnLoadSuccessCallback(onLoadSuccessCallback, callbackCause); assetCat.AddOnLoadFailCallback(onLoadFailCallback, callbackCause); assetCat.AddOnLoadDoneCallback(onLoadDoneCallback, callbackCause); var assetBundleLoader = __LoadAssetBundleAsync(assetBundleName); assetAsyncLoader.Init(assetCat, assetBundleLoader); //asset拥有对assetBundle的引用 var assetBundleCat = assetBundleLoader.assetBundleCat; assetBundleCat.AddRefCount(); assetCat.assetBundleCat = assetBundleCat; assetAsyncloaderProcessingList.Add(assetAsyncLoader); return(assetAsyncLoader); }
protected static void Set <TargetComponent_AssetObjectType>(TargetComponent component, AssetCat assetCat, string assetPath) where TargetComponent_AssetObjectType : AutoAssetRelease <TargetComponent, AssetObjectType> { if (component == null || assetCat == null) { return; } var ai = component.GetComponent <TargetComponent_AssetObjectType>(); if (ai != null) { ai.ReleaseAll(); } else { ai = component.gameObject.AddComponent <TargetComponent_AssetObjectType>(); } ai.SetCurAssetCat(assetCat, assetPath); assetCat.AddRefCount(); }
public static void SetAssetCat(AssetCat assetCat, Object[] assets) { }
public ResLoadData(AssetCat assetCat) { this.assetCat = assetCat; assetCat.AddRefCount(); }
public void SetPreAssetCat(AssetCat preAssetCat, string preAssetPath) { this.preAssetCat = preAssetCat; this.preAssetPath = preAssetPath; }
public void CancelLoadCallback(AssetCat assetCat, object callbackCause = null) { this.resLoadComponent.CancelLoadCallback(assetCat, callbackCause); __RemoveFromAssetCatDict(assetCat, callbackCause); }
public void CancelLoadAllCallbacks(AssetCat assetCat) { this.resLoad.CancelLoadAllCallbacks(assetCat); }
public void CancelLoadCallback(AssetCat assetCat, object callbackCause = null) { this.resLoad.CancelLoadCallback(assetCat, callbackCause); }
protected override void _Destroy() { base._Destroy(); assetCat = null; }
private void __AddAssetCat(string assetPath, AssetCat asset) { assetCatDict[assetPath] = asset; }
void __AddToAssetCatDict(AssetCat assetCat, object callbackCause) { assetCatDict.GetOrAddDefault(assetCat, () => new Dictionary <object, bool>())[callbackCause.GetNotNullKey()] = true; }
public void SetCurAssetCat(AssetCat curAssetCat, string curAssetPath) { this.curAssetCat = curAssetCat; this.curAssetPath = curAssetPath; }
/// <summary> /// 只能通过这个方法添加 /// </summary> /// <param name="go"></param> /// <param name="assetCat"></param> public static void Add(GameObject go, AssetCat assetCat) { assetCat.AddRefCount(); var autoAssetDestroy = go.AddComponent<AutoAssetDestroy>(); autoAssetDestroy.assetCat = assetCat; }