diff options
Diffstat (limited to 'Assets/Scripts/Editor')
-rw-r--r-- | Assets/Scripts/Editor/BuildCustomPipeline.cs | 16 | ||||
-rw-r--r-- | Assets/Scripts/Editor/BuildCustomPipeline.cs.meta | 11 | ||||
-rw-r--r-- | Assets/Scripts/Editor/BundleHelper.cs | 82 | ||||
-rw-r--r-- | Assets/Scripts/Editor/BundleHelper.cs.meta | 11 |
4 files changed, 120 insertions, 0 deletions
diff --git a/Assets/Scripts/Editor/BuildCustomPipeline.cs b/Assets/Scripts/Editor/BuildCustomPipeline.cs new file mode 100644 index 0000000..3c91409 --- /dev/null +++ b/Assets/Scripts/Editor/BuildCustomPipeline.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; + +public class BuildCustomPipeline : IPreprocessBuildWithReport +{ + public int callbackOrder { get { return 0; } } + public void OnPreprocessBuild(BuildReport report) + { + // BundleHelper.BuildBundles(); + } + +} diff --git a/Assets/Scripts/Editor/BuildCustomPipeline.cs.meta b/Assets/Scripts/Editor/BuildCustomPipeline.cs.meta new file mode 100644 index 0000000..5230b90 --- /dev/null +++ b/Assets/Scripts/Editor/BuildCustomPipeline.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 900a82c1f64da4b488ea055108308070 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor/BundleHelper.cs b/Assets/Scripts/Editor/BundleHelper.cs new file mode 100644 index 0000000..631d542 --- /dev/null +++ b/Assets/Scripts/Editor/BundleHelper.cs @@ -0,0 +1,82 @@ +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Linq; +using System.IO; +using UnityEngine; +using UnityEditor; + +public class BundleHelper +{ + + static string TempPath = Application.temporaryCachePath + "/PackData"; + static string TargetPath = Application.dataPath + "/StreamingAssets/PackData"; // or Application.streamingAssetsPath + static string MainBundleName = "PackData"; + static string MainBundle = TargetPath + "/PackData"; + static string ManifestFile = Application.dataPath + "/Resources/bundles.manifest"; + + [MenuItem("Build/Build bundles")] + public static void BuildBundles() + { + if(!Directory.Exists(TempPath)) + Directory.CreateDirectory(TempPath); + BuildAssetBundleOptions options = BuildAssetBundleOptions.None; + options |= BuildAssetBundleOptions.ChunkBasedCompression; + options |= BuildAssetBundleOptions.DeterministicAssetBundle; + options |= BuildAssetBundleOptions.ForceRebuildAssetBundle; + options |= BuildAssetBundleOptions.StrictMode; +#if UNITY_IOS + BuildPipeline.BuildAssetBundles(TempPath, options, BuildTarget.iOS); +#elif UNITY_ANDROID + BuildPipeline.BuildAssetBundles(TempPath, options, BuildTarget.Android); +#else + BuildPipeline.BuildAssetBundles(TempPath, options, BuildTarget.StandaloneWindows); +#endif + Debug.Log("Bundle生成结束"); + // Move to StreamingAssets + if (!Directory.Exists(TargetPath)) + Directory.CreateDirectory(TargetPath); + string[] files = Directory.GetFiles(TempPath, "*.*"); + string dirPath = null; + foreach(string file in files) + { + if (!file.EndsWith(".manifest") && !file.EndsWith(".meta")) + { + dirPath = file.Replace('\\', '/'); + dirPath = dirPath.Replace(TempPath, TargetPath); + if (File.Exists(dirPath)) + File.Delete(dirPath); + File.Move(file, dirPath); + } + } + // 将bundle的md5写入bundles.manifest文件 + AssetBundle mainBundle = AssetBundle.LoadFromFile(MainBundle); + if (mainBundle != null) + { + AssetBundleManifest manifest = mainBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest"); + if (manifest != null) + { + if (File.Exists(ManifestFile)) + File.Delete(ManifestFile); + using (StreamWriter file = new System.IO.StreamWriter(ManifestFile, true)) + { + string[] bundles = manifest.GetAllAssetBundles(); + List<string> _bundles = bundles.ToList<string>(); + _bundles.Add(MainBundleName); + foreach (string bundle in _bundles) + { + string path = TargetPath + "/" + bundle ; + if (!File.Exists(path)) + continue; + long size = new FileInfo(path).Length; + byte[] data = File.ReadAllBytes(path); + string hash = FileUtil.GetMD5Hash(data); + file.WriteLine(bundle + "," + size + "," + hash); + } + }; + } + mainBundle.Unload(true); + } + } + +} diff --git a/Assets/Scripts/Editor/BundleHelper.cs.meta b/Assets/Scripts/Editor/BundleHelper.cs.meta new file mode 100644 index 0000000..673f75d --- /dev/null +++ b/Assets/Scripts/Editor/BundleHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9eb05f681b7bd80448b2f488711dad41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |