// Check if assets of assetbundle is updated static bool CheckUpdateOfBundleAssets(AssetBundleManageData data, AssetBundleData assetbundle) { if (assetbundle.GetAllContents().Count <= 0) { return(false); } List <string> files = new List <string>(); foreach (var path in assetbundle.GetAllContentsPath()) { if (File.Exists(path)) { files.Add(path); } } var targets = new BuildTarget[] { EditorUserBuildSettings.activeBuildTarget }; #if !DLL if (assetbundle.PlatformFolder && data.multiPlatform && 0 < data.targets.Count) { targets = data.targets.ToArray(); } #endif List <string> platformList = new List <string>(); foreach (BuildTarget target in targets) { var path = assetbundle.Path; #if !DLL if (assetbundle.PlatformFolder) { var platformFolder = AssetBundleManager.GetPlatformFolder(target); if (platformList.Contains(platformFolder)) { continue; } platformList.Add(platformFolder); path = GetFullPath(assetbundle, target); } #endif if (AssetBundleUtility.CheckUpdateOfBundleAssets(files.ToArray(), path, (BuildAssetBundleOptions)assetbundle.Options)) { return(true); } } return(false); }
static bool CreateAssetBundle(AssetBundleManageData data, AssetBundleData assetbundle, bool rebuild, bool dependency) { if (assetbundle.GetAllContents().Count <= 0) { return(false); } // add all path to list List <string> files = new List <string>(); foreach (var path in assetbundle.GetAllContentsPath()) { if (File.Exists(path)) { files.Add(path); } } // add special list asset for system BundleAssetList list = null; string listpath = System.IO.Path.GetDirectoryName(AssetDatabase.GetAssetPath(data)) + "/list/" + assetbundle.File + "/list.asset"; //Application.temporaryCachePath + "/" + "list.asset"; if (!assetbundle.ForStreamedScene) { list = CreateInstance <BundleAssetList>(); list.Assets = files.Select(file => { FileInfo info = new FileInfo(file); BundleAssetInfo asset = new BundleAssetInfo(info.Name); return(asset); }).ToArray(); var directory = System.IO.Path.GetDirectoryName(listpath).Substring("Assets".Length); System.IO.Directory.CreateDirectory(Application.dataPath + directory); AssetDatabase.CreateAsset(list, listpath); //files.Add(listpath); AssetBundleUtility.AssetList = list; // BundleAssetList.cs(not exist file "BundleAssetList.cs" with DLL) //string bundleAssetsListPath = "Assets/" + Path.GetDirectoryName(AssetBundleManager.SettingDataPath) + "/Scripts/BundleAssetList.cs"; //files.Add(bundleAssetsListPath); } var targets = new BuildTarget[] { EditorUserBuildSettings.activeBuildTarget }; #if !DLL if (assetbundle.PlatformFolder && data.multiPlatform && 0 < data.targets.Count) { targets = data.targets.ToArray(); } #endif bool ret = false; List <string> platformList = new List <string>(); foreach (BuildTarget target in targets) { var path = assetbundle.Path.Replace(AssetBundleManager.PlatformFolder, AssetBundleManager.GetPlatformFolder(Application.platform)); #if !DLL if (assetbundle.PlatformFolder) { var platformFolder = AssetBundleManager.GetPlatformFolder(target); if (platformList.Contains(platformFolder)) { continue; } platformList.Add(platformFolder); path = GetFullPath(assetbundle, target); } #endif var dir = Path.GetDirectoryName(path); if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir)) { Directory.CreateDirectory(dir); //AssetDatabase.CreateFolder(Path.GetDirectoryName(dir), Path.GetFileName(dir)); } if (!string.IsNullOrEmpty(dir)) { dir = dir + "/"; } if (!assetbundle.ForStreamedScene) { if (!assetbundle.Separated) { Debug.Log(nestString + "Build " + assetbundle.File); if (AssetBundleUtility.CreateBundle(files.ToArray(), path, (BuildAssetBundleOptions)assetbundle.Options, target, rebuild | assetbundle.Changed)) { ret = true; } } else { var infos = new BundleAssetInfo[] { new BundleAssetInfo("") }; list.Assets = infos; AssetBundleUtility.AssetList = list; foreach (var file in files) { infos[0].Name = file; string name = Path.GetFileNameWithoutExtension(file) + ".unity3d"; Debug.Log(nestString + "Build " + name); if (AssetBundleUtility.CreateBundle(file, dir + name, (BuildAssetBundleOptions)assetbundle.Options, target, rebuild | assetbundle.Changed)) { ret = true; } BuildPipeline.PopAssetDependencies(); BuildPipeline.PushAssetDependencies(); } } } else { if (!assetbundle.Separated) { Debug.Log(nestString + "Build " + assetbundle.File); if (AssetBundleUtility.CreateSceneBundle(files.ToArray(), path, (BuildAssetBundleOptions)assetbundle.Options, target, rebuild | assetbundle.Changed)) { ret = true; } } else { foreach (var file in files) { string name = Path.GetFileNameWithoutExtension(file) + ".unity3d"; Debug.Log(nestString + "Build " + name); if (AssetBundleUtility.CreateSceneBundle(file, dir + name, (BuildAssetBundleOptions)assetbundle.Options, target, rebuild | assetbundle.Changed)) { ret = true; } BuildPipeline.PopAssetDependencies(); BuildPipeline.PushAssetDependencies(); } } } } assetbundle.Changed = false; //AssetDatabase.DeleteAsset(listpath); Child assetbundle require list.asset of parent assetbundle. //AssetDatabase.Refresh(); return(ret); }
void OnGUI() { if (this._first) { this.RefreshAssetBundleList(); this._first = false; } // Undo switch (Event.current.type) { case EventType.MouseUp: case EventType.MouseDown: if (Event.current.button == 0) // Left Click { Undo.RecordObjects(this._undoObjects, "AssetBundleData"); } break; case EventType.DragPerform: Undo.RecordObjects(this._undoObjects, "AssetBundleData"); break; case EventType.KeyDown: Undo.RecordObjects(this._undoObjects, "AssetBundleData"); break; } this._assetBundleData.notUseBundleOnEditor = EditorGUILayout.ToggleLeft(this._notUseBundleContent, this._assetBundleData.notUseBundleOnEditor); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical("Box"); //EditorGUILayout.BeginHorizontal(); //EditorGUILayout.PrefixLabel(this._editBundleContent); EditorGUI.BeginChangeCheck(); // assetbundle list this._bundleListPos = EditorGUILayout.Popup(this._editBundleContent, this._bundleListPos, this._assetBundlePathList); if (EditorGUI.EndChangeCheck()) { this.SelectAssetBundle(this._bundleListPos); } //EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.Space(); if (GUILayout.Button("Add", GUILayout.Width(100))) { var ret = EditorUtility.SaveFilePanel("Add AssetBundle", Application.dataPath, "NewAssetBundle", "unity3d"); if (!string.IsNullOrEmpty(ret)) { var path = AssetBundleUtility.ChangeRelativePath(Application.dataPath, ret); //FileInfo file = new FileInfo(path); var assetbundle = new AssetBundleData(Path.GetDirectoryName(path), Path.GetFileName(path)); //file.DirectoryName, file.Name); this._assetBundleData.assetbundles.Add(assetbundle); this._bundleListPos = this._assetBundleData.assetbundles.Count - 1; this.RefreshAssetBundleList(); } } EditorGUI.BeginDisabledGroup(this._assetBundleData.assetbundles.Count <= this._bundleListPos); if (GUILayout.Button("Delete", GUILayout.Width(100))) { // decrement parent no foreach (var assetbundle in this._assetBundleData.assetbundles) { if (this._bundleListPos == assetbundle.ParentNo) { assetbundle.ParentNo = -1; } if (this._bundleListPos < assetbundle.ParentNo) { --assetbundle.ParentNo; } } // remove this._assetBundleData.assetbundles.RemoveAt(this._bundleListPos); this.RefreshAssetBundleList(); } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); #if DLL EditorGUI.BeginDisabledGroup(true); #endif // multi build this._assetBundleData.multiPlatform = EditorGUILayout.Toggle("Multi Platform", this._assetBundleData.multiPlatform); EditorGUI.BeginDisabledGroup(!this._assetBundleData.multiPlatform); // target list int targetflg = 0; var targets = (System.Enum.GetValues(typeof(BuildTarget)) as int[]).Distinct().Select(v => (BuildTarget)v).ToArray(); #if !DLL for (int i = 0; i < targets.Length; ++i) { if (this._assetBundleData.targets.Contains(targets[i])) { targetflg |= (1 << (int)i); } } #endif targetflg = EditorGUILayout.MaskField("BuildTarget", targetflg, targets.Select(v => ((BuildTarget)v).ToString()).ToArray()); #if !DLL this._assetBundleData.targets.Clear(); for (int i = 0; i < targets.Length; ++i) { if ((targetflg & (1 << i)) != 0) { this._assetBundleData.targets.Add(targets[i]); } } #endif EditorGUI.EndDisabledGroup(); #if DLL EditorGUI.EndDisabledGroup(); #endif EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(this._assetBundleData.assetbundles.Count <= this._bundleListPos); if (GUILayout.Button("Build", GUILayout.Width(150), GUILayout.Height(25))) { // Create a selected assetbundle this._delayAction = () => { this.CreateAssetBundleWithDependency(this._bundleListPos, false); this.Save(); }; } EditorGUI.EndDisabledGroup(); if (GUILayout.Button("Build All", GUILayout.Width(150), GUILayout.Height(25))) { // Create all assetbundles this._delayAction = () => { this.CreateAssetBundleAll(false); this.Save(); }; } EditorGUILayout.EndHorizontal(); //EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(this._assetBundleData.assetbundles.Count <= this._bundleListPos); if (GUILayout.Button("Rebuild", GUILayout.Width(150), GUILayout.Height(25))) { // Create a selected assetbundle this._delayAction = () => { this.CreateAssetBundleWithDependency(this._bundleListPos, true); this.Save(); }; } EditorGUI.EndDisabledGroup(); if (GUILayout.Button("Rebuild All", GUILayout.Width(150), GUILayout.Height(25))) { // Create all assetbundles this._delayAction = () => { this.CreateAssetBundleAll(true); this.Save(); }; } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.Separator(); //EditorGUILayout.LabelField("System"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.Space(); EditorGUILayout.Space(); if (GUILayout.Button("Save")) { // Save this.Save(); } if (GUILayout.Button("Exit")) { // Exit. this.Close(); } EditorGUILayout.EndHorizontal(); }