Esempio n. 1
0
        public static void ObtainNetwork(BundleData bundleData, Action <string, float, bool> handler = null)
        {
            var sourceFile = Helper.GetDataPath(bundleData.bundleName);

            if (bundleData.bundleInPack)
            {
                sourceFile = "file:///" + Helper.GetInternalPath(bundleData.bundleName);
            }
            Instance.StartCoroutine(Obtain(sourceFile, bundleData.bundleName, bundleData.bundleHash128, handler));
        }
        static void CacAssetBundleSize()
        {
            var BundlePath = BundleSavePath + "/";
            var srcAMF     = BundlePath + Helper.BundleSaveName;

            if (File.Exists(srcAMF))
            {
                var ab  = AssetBundle.LoadFromFile(srcAMF);
                var abm = ab.LoadAsset <AssetBundleManifest>("AssetBundleManifest");
                ab.Unload(false);

                // Create Map from asset to AssetBundle.
                var data    = new BundleDatas();
                var bundles = abm.GetAllAssetBundles();
                foreach (var bundle in bundles)
                {
                    var bd = new BundleData
                    {
                        bundleInPack       = false,
                        bundleName         = bundle,
                        bundleHash128      = abm.GetAssetBundleHash(bundle),
                        bundleDependencies = abm.GetDirectDependencies(bundle),
                        bundleSize         = new FileInfo(BundlePath + bundle).Length
                    };
                    data.Datas.Add(bundle, bd);

                    var bdm    = AssetBundle.LoadFromFile(BundlePath + bundle);
                    var bdabns = bdm.GetAllAssetNames();
                    var bdabps = bdm.GetAllScenePaths();
                    bdm.Unload(true);
                    foreach (var asset in bdabns)
                    {
                        if (!data.Names.ContainsKey(asset.ToLower()))
                        {
                            data.Names.Add(asset.ToLower(), new BundleName()
                            {
                                bundleName = bundle
                            });
                        }
                        if (asset.EndsWith(".spriteatlas", StringComparison.Ordinal))
                        {
                            var deps = AssetDatabase.GetDependencies(asset, false);
                            foreach (var dep in deps)
                            {
                                string spriteName = string.Empty;
                                if (Helper.ConvertToAtlasSpriteName(dep, out spriteName))
                                {
                                    data.Names[dep.ToLower()] = new BundleName()
                                    {
                                        atlasSprite = true, bundleName = bundle, atlasName = asset, spriteName = spriteName
                                    };
                                }
                            }
                        }
                    }
                    foreach (var asset in bdabps)
                    {
                        data.Names.Add(asset.ToLower(), new BundleName()
                        {
                            bundleName = bundle
                        });
                    }
                }

                var bytes  = BundleDatas.Serialize(data);
                var nbytes = Crypto.ZLib.Zip(bytes);
                //bytes = Crypto.UnZip(nbytes);
                //var obj = ScriptableBundleData.Deserialize(bytes);
                File.WriteAllBytes(srcAMF + "_size", nbytes);
            }
        }