public static byte[] Serialize(BundleDatas o) { var s = new MemoryStream(); var formatter = new BinaryFormatter(); formatter.Serialize(s, o); return(s.ToArray()); }
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); } }
public static IEnumerator Initialize() { bool netError = false; s_BundleDatas.Clear(); s_BundleNames.Clear(); if (true) { string netAMF = Helper.GetDataPath(Helper.BundleSaveName) + "_size"; var www = UnityWebRequest.Get(netAMF); Debug.Log(netAMF); yield return(www.SendWebRequest()); if (!www.isNetworkError && !www.isHttpError) { var bytes = www.downloadHandler.data; var nbytes = Crypto.ZLib.UnZip(bytes); var data = BundleDatas.Deserialize(nbytes); foreach (var bd in data.Datas) { s_BundleDatas.Add(bd.Key, bd.Value); } string atlasName = string.Empty; foreach (var kv in data.Names) { var key = kv.Key.ToLower(); if (s_BundleNames.ContainsKey(key)) { Debug.LogError(key + " " + kv.Value + " " + s_BundleNames[key]); continue; } s_BundleNames.Add(key, kv.Value); if (Helper.ConvertToAtlasName(key, out atlasName)) { if (s_AtlasNames.ContainsKey(atlasName.ToLower())) { Debug.LogError(atlasName + " - " + key + " : " + s_AtlasNames[atlasName]); continue; } s_AtlasNames.Add(atlasName.ToLower(), key); } } } else { Debug.LogError("Get " + netAMF + " -> " + www.error); netError = true; } www.Dispose(); } if (netError) { var locAMF = Helper.GetInternalPath(Helper.BundleSaveName) + "_size"; Debug.Log(locAMF); #if UNITY_ANDROID var www = new WWW(locAMF); #else var www = new WWW("file:///" + locAMF); #endif yield return(www); if (string.IsNullOrEmpty(www.error)) { var bytes = www.bytes; var nbytes = Crypto.ZLib.UnZip(bytes); var data = BundleDatas.Deserialize(nbytes); foreach (var bd in data.Datas) { s_BundleDatas.Add(bd.Key, bd.Value); } string atlasName = string.Empty; foreach (var kv in data.Names) { var key = kv.Key.ToLower(); s_BundleNames.Add(key, kv.Value); if (Helper.ConvertToAtlasName(key, out atlasName)) { if (s_AtlasNames.ContainsKey(atlasName.ToLower())) { Debug.LogError(atlasName + " - " + key + " : " + s_AtlasNames[atlasName]); continue; } s_AtlasNames.Add(atlasName.ToLower(), key); } } } else { Debug.LogError("Get " + locAMF + " -> " + www.error); } } if (true) { var srcAMF = Helper.GetInternalPath(Helper.BundleSaveName); #if UNITY_ANDROID var www = new WWW(srcAMF); #else var www = new WWW("file:///" + srcAMF); #endif yield return(www); if (string.IsNullOrEmpty(www.error)) { var ab = www.assetBundle; var abm = ab.LoadAsset <AssetBundleManifest>("AssetBundleManifest"); ab.Unload(false); foreach (var bd in s_BundleDatas) { if (bd.Value.bundleHash128 == abm.GetAssetBundleHash(bd.Key)) { bd.Value.bundleInPack = true; } } } else { Debug.LogWarning("Get " + srcAMF + " -> " + www.error); } } }