public static IEnumerator Init() { if (!Application.isPlaying) { yield break; } var resManager = FindObjectOfType(typeof(ResourceManager)) as ResourceManager; if (resManager == null) { var gameObj = new GameObject("_ResourceManager"); resManager = gameObj.AddComponent <ResourceManager>(); _Instance = resManager; } var child = new GameObject("_Pool"); child.transform.SetParent(resManager.transform, false); child.SetActive(false); ResourcePoolManager._poolParent = child.transform; AsyncImageDownload.Init(); _lastReleaseTime = Time.time; _Instance.StartCoroutine(OnReleaseUnusedAssets()); if (AppEnv.IsUseAB) { yield return(BundleManager.InitCoreBundle()); } }
public static void UnInitGameResource() { if (AppEnv.IsUseAB) { BundleManager.UnInitGameBundle(); } ResourcePoolManager.ClearPools(); }
public static IEnumerator InitGameResource(string gameName) { if (AppEnv.IsUseAB) { yield return(BundleManager.InitGameBundle(gameName)); } yield return(1); }
private static Object LoadAsset(string assetPath, Type type, bool shouldCacheAsset = false) { if (string.IsNullOrEmpty(assetPath)) { return(null); } var extensions = ResourceExtensions.GetExtOfType(type); foreach (var ext in extensions) { // 先找缓存 var assetPathWithExt = assetPath + ext; ResourcePool resourcePool; if (ResourcePoolManager._resourcePoolDict.TryGetValue(assetPathWithExt, out resourcePool)) { (resourcePool.Resource as GameObject).SetActive(true); return(resourcePool.Resource); } var hasCached = false; Object asset = null; if (!AppEnv.IsUseAB) { #if UNITY_EDITOR asset = AssetManager.LoadFromAssetDatabase(assetPathWithExt, type); #endif } else { asset = BundleManager.LoadFromAssetBundle(assetPathWithExt, type); } if (asset == null) { continue; } if (shouldCacheAsset && !hasCached) { resourcePool = new ResourcePool(asset, ResourcePoolManager._poolParent); ResourcePoolManager._resourcePoolDict.Add(assetPathWithExt, resourcePool); } return(asset); } LogHelper.INFO("ResourceManager", "loading file {0} failed, type {1}", assetPath, type); return(null); }
private static IEnumerator LoadAssetAsync(string assetPath, Type type, Action <int> _CachedDoneCallback, bool shouldCacheAsset = false) { if (string.IsNullOrEmpty(assetPath)) { yield break; } var extensions = ResourceExtensions.GetExtOfType(type); foreach (var ext in extensions) { var assetPathWithExt = assetPath + ext; Object asset = null; ResourcePool resourcePool; if (ResourcePoolManager._resourcePoolDict.TryGetValue(assetPathWithExt, out resourcePool)) { asset = resourcePool.Resource as GameObject; (asset as GameObject).SetActive(true); var obj = InstantiateObject(asset) as GameObject; resourcePool = new ResourcePool(obj, ResourcePoolManager._poolParent); ResourcePoolManager._resourcePoolDict.Add(assetPath, resourcePool); _CachedDoneCallback?.Invoke(ResourcePoolManager._resourcePoolDict.Count); yield break; } var hasCached = false; if (!AppEnv.IsUseAB) { #if UNITY_EDITOR _Instance.StartCoroutine(AssetManager.LoadFromAssetDatabaseAsync(assetPathWithExt, type, resourcePool, shouldCacheAsset, hasCached, _CachedDoneCallback)); #endif } else { _Instance.StartCoroutine(BundleManager.LoadFromAssetBundleAsync(assetPathWithExt, type, resourcePool, shouldCacheAsset, hasCached, _CachedDoneCallback)); } } }