Beispiel #1
0
 /// <summary>
 /// 资源回收(卸载引用计数为零的资源)
 /// </summary>
 public static void UnloadUnusedAssets()
 {
     if (_simulationOnEditor)
     {
         for (int i = _providers.Count - 1; i >= 0; i--)
         {
             if (_providers[i].CanDestroy())
             {
                 _providers[i].Destroy();
                 _providers.RemoveAt(i);
             }
         }
     }
     else
     {
         for (int i = _loaders.Count - 1; i >= 0; i--)
         {
             AssetBundleLoaderBase loader = _loaders[i];
             loader.TryDestroyAllProviders();
         }
         for (int i = _loaders.Count - 1; i >= 0; i--)
         {
             AssetBundleLoaderBase loader = _loaders[i];
             if (loader.CanDestroy())
             {
                 loader.Destroy(false);
                 _loaders.RemoveAt(i);
             }
         }
     }
 }
Beispiel #2
0
        internal static List <AssetBundleLoaderBase> CreateDependAssetBundleLoaders(AssetInfo assetInfo)
        {
            BundleInfo[] depends = BundleServices.GetAllDependBundleInfos(assetInfo);
            List <AssetBundleLoaderBase> result = new List <AssetBundleLoaderBase>(depends.Length);

            foreach (var bundleInfo in depends)
            {
                AssetBundleLoaderBase dependLoader = CreateAssetBundleLoaderInternal(bundleInfo);
                result.Add(dependLoader);
            }
            return(result);
        }
Beispiel #3
0
        private static AssetBundleLoaderBase TryGetAssetBundleLoader(string bundleName)
        {
            AssetBundleLoaderBase loader = null;

            for (int i = 0; i < _loaders.Count; i++)
            {
                AssetBundleLoaderBase temp = _loaders[i];
                if (temp.MainBundleInfo.BundleName.Equals(bundleName))
                {
                    loader = temp;
                    break;
                }
            }
            return(loader);
        }
Beispiel #4
0
        private static AssetBundleLoaderBase CreateAssetBundleLoaderInternal(BundleInfo bundleInfo)
        {
            // 如果加载器已经存在
            AssetBundleLoaderBase loader = TryGetAssetBundleLoader(bundleInfo.BundleName);

            if (loader != null)
            {
                return(loader);
            }

            // 新增下载需求
#if UNITY_WEBGL
            loader = new AssetBundleWebLoader(bundleInfo);
#else
            loader = new AssetBundleFileLoader(bundleInfo);
#endif

            _loaders.Add(loader);
            return(loader);
        }