/// <summary> /// 资源引用数减少(该资源的依赖也会减少) /// </summary> /// <param name="path"></param> public void DestoryAssetsCounter(string path) { if (assetsCaches.ContainsKey(path)) { AssetsData assets = assetsCaches[path]; assets.refCount--; if (assets.refCount < 0) { Debug.LogError("资源引用计数错误:(" + assets.refCount + ") " + assets.assetPath); assets.refCount = 0; } if (assets.refCount <= 0) { AssetsUnloadHandler.DiscardAssets(assets); } string[] dependenciesNames = loader.GetAllDependenciesName(path); //Debug.LogWarning("DestoryAssets:" + name + "=>" + string.Join("\n", dependenciesNames)); foreach (var item in dependenciesNames) { DestoryAssetsCounter(item); } } else { if (m_useCache) { Debug.LogError("未加载资源,不能Destroy :" + path); } } }
public AssetsData LoadAssetsLogic(string path, CallBackR <bool> checkContainsAssets, CallBackR <AssetsData, string> loadMethod) { LoadAssetsDependencie(path); AssetsData assets = null; if (checkContainsAssets()) { assets = assetsCaches[path]; } else { assets = loadMethod(path); if (assets == null) { Debug.LogError("资源加载失败:" + path); return(assets); } else { if (assetsCaches.ContainsKey(path)) { List <Object> asList = new List <Object>(assetsCaches[path].Assets); foreach (var item in assets.Assets) { if (!asList.Contains(item)) { asList.Add(item); } } assetsCaches[path].Assets = asList.ToArray(); assets = assetsCaches[path]; } else { if (m_useCache) { assetsCaches.Add(path, assets); } } } } if (m_useCache) { assets.refCount++; AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path)); } return(assets); }
/// <summary> /// 根据名字创建对象 /// </summary> /// <param name="key"></param> /// <param name="position"></param> /// <param name="rotation"></param> /// <returns></returns> public GameObject CreateObject(string key, Vector3 position, Quaternion rotation) { GameObject go = FindUsableObject(key); if (go == null) { go = AddObject(key); } if (go == null) { Debug.LogError("GameObjectPool 加载失败:" + name); return(go); } AssetsUnloadHandler.MarkUseAssets(name); UseObject(position, rotation, go); return(go); }
/// <summary> /// 异步加载资源逻辑 /// </summary> /// <param name="path"></param> /// <param name="assetType"></param> /// <param name="callBack"></param> /// <returns></returns> private IEnumerator LoadAssetsIEnumerator(string path, System.Type assetType, CallBack <Object> callBack) { yield return(LoadAssetsIDependencieEnumerator(path)); if (assetsCaches.ContainsKey(path)) { AssetsData assets = assetsCaches[path]; if (m_useCache) { assets.refCount++; AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path)); } if (callBack != null) { callBack(assets.Assets[0]); } } else { yield return(loader.LoadAssetsIEnumerator(path, assetType, (assets) => { if (m_useCache) { assetsCaches.Add(path, assets); } if (m_useCache) { assets.refCount++; AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path)); } if (callBack != null) { callBack(assets.Assets[0]); } })); } yield return(0); }