/// <summary> /// 修改打包规则 /// </summary> void ModifyRuleForSelectTreeNodes(emAssetBundleNameRule rule) { if (gui_multi_select_ != null) { for (int i = 0; i < gui_multi_select_.SelectNodes.Count; i++) { var asset_node = gui_multi_select_.SelectNodes[i] as AssetNode; asset_node.Element.Rule = (int)rule; } } }
/// <summary> /// 修改打包规则 /// </summary> void ModifyRuleForSelectTreeNodes(emAssetBundleNameRule rule , bool is_compress, bool is_native, bool is_permanent, bool is_startup_load) { if (gui_multi_select_ != null) { for (int i = 0; i < gui_multi_select_.SelectNodes.Count; i++) { var asset_node = gui_multi_select_.SelectNodes[i] as AssetNode; asset_node.Element.Rule = (int)rule; asset_node.Element.IsCompress = is_compress; asset_node.Element.IsNative = is_native; asset_node.Element.IsPermanent = is_permanent; asset_node.Element.IsStartupLoad = is_startup_load; } } }
/// <summary> /// 选中的树形节点信息 /// </summary> bool DrawSelectAssetNodeInfo(out emAssetBundleNameRule rule) { rule = emAssetBundleNameRule.None; if (gui_multi_select_ == null || gui_multi_select_.SelectNodes.Count == 0) { return(false); } var asset_node = gui_multi_select_.SelectNodes[0] as AssetNode; rule = (emAssetBundleNameRule)asset_node.Element.Rule; //打包规则 GUILayout.BeginHorizontal(); GUILayout.Label("打包规则", GUILayout.MaxWidth(50f), GUILayout.MaxHeight(16f)); emAssetBundleNameRule select_rule = (emAssetBundleNameRule)EditorGUILayout.EnumPopup("", rule, GUILayout.MaxWidth(150f), GUILayout.MaxHeight(16f)); GUILayout.EndHorizontal(); //资源粒度 if (gui_multi_select_.SelectNodes.Count == 1) { GUILayout.BeginHorizontal(); GUILayout.Label("资源粒度", GUILayout.MaxWidth(50f), GUILayout.MaxHeight(16f)); GUILayout.Label(asset_node.Granularity.ToString(), "AS TextArea", GUILayout.MaxWidth(150f), GUILayout.MaxHeight(16f)); GUILayout.EndHorizontal(); } if (select_rule != rule) { rule = select_rule; return(true); } return(false); }
/// <summary> /// /// </summary> static void ChangeAssetBundleName(string folder_full_name , string element_path , AssetBundleBuildData.AssetBuild.Element element , emAssetBundleNameRule inherit_rule , System.Action <string> change_report = null) { if (cancel_running_nametool_) { return; } if (string.IsNullOrEmpty(element_path)) { return; } if (element == null) { return; } DirectoryInfo dir = new DirectoryInfo(folder_full_name); if (!dir.Exists) { return; } if (inherit_rule != emAssetBundleNameRule.Ignore) { inherit_rule = (emAssetBundleNameRule)element.Rule; } bool same_directory = folder_full_name == element_path; //遍历文件,并设置其AssetBundleName FileInfo[] all_files = dir.GetFiles(); foreach (var f in all_files) { if (!EditorCommon.IsIgnoreFile(f.Name)) { if (!same_directory) { ClearAssetBundleName(f.FullName); } else { AssetBundleBuildData.AssetBuild.Element child = element.FindFileElement(f.Name); emAssetBundleNameRule my_rule = child != null ? (emAssetBundleNameRule)child.Rule : emAssetBundleNameRule.None; if (child != null && change_report != null) { change_report(f.FullName); } if (my_rule == emAssetBundleNameRule.SingleFile && inherit_rule != emAssetBundleNameRule.Ignore) { SetAssetBundleName(f.FullName); } else { ClearAssetBundleName(f.FullName); } } } } //遍历文件夹 DirectoryInfo[] all_dirs = dir.GetDirectories(); foreach (DirectoryInfo d in all_dirs) { if (!EditorCommon.IsIgnoreFolder(d.Name)) { string child_element_path = null; AssetBundleBuildData.AssetBuild.Element child = null; if (!same_directory) { child_element_path = element_path; child = element; ClearAssetBundleName(d.FullName); } else { child_element_path = Common.CovertCommonPath(d.FullName); child = element.FindFolderElement(d.Name); emAssetBundleNameRule my_rule = child != null ? (emAssetBundleNameRule)child.Rule : emAssetBundleNameRule.None; if (child != null && change_report != null) { change_report(d.FullName); } if (my_rule == emAssetBundleNameRule.Folder && inherit_rule != emAssetBundleNameRule.Ignore) { SetAssetBundleName(d.FullName); } else { ClearAssetBundleName(d.FullName); } } ChangeAssetBundleName(Common.CovertCommonPath(d.FullName) , child_element_path, child, inherit_rule, change_report); } } }
/// <summary> /// /// </summary> static void ChangeAssetBundleName(string folder_full_name , AssetBundleBuildData.AssetBuild.Element element , System.Action <string> change_callback = null) { if (cancel_running_nametool_) { return; } if (element == null) { return; } DirectoryInfo dir = new DirectoryInfo(folder_full_name); if (!dir.Exists) { return; } //遍历文件,并设置其AssetBundleName FileInfo[] all_files = dir.GetFiles(); foreach (var f in all_files) { AssetBundleBuildData.AssetBuild.Element child = element.FindFileElement(f.Name); emAssetBundleNameRule my_rule = child != null ? (emAssetBundleNameRule)child.Rule : emAssetBundleNameRule.None; if (!EditorCommon.IsIgnoreFile(f.Name)) { if (my_rule == emAssetBundleNameRule.SingleFile) { SetAssetBundleName(f.FullName); } else { ClearAssetBundleName(f.FullName); } } if (child != null) { if (change_callback != null) { change_callback(f.FullName); } } } //遍历文件夹 DirectoryInfo[] all_dirs = dir.GetDirectories(); foreach (DirectoryInfo d in all_dirs) { if (!EditorCommon.IsIgnoreFolder(d.Name)) { AssetBundleBuildData.AssetBuild.Element child = element.FindFolderElement(d.Name); emAssetBundleNameRule my_rule = child != null ? (emAssetBundleNameRule)child.Rule : emAssetBundleNameRule.None; if (my_rule == emAssetBundleNameRule.Folder) { SetAssetBundleName(d.FullName); } else { ClearAssetBundleName(d.FullName); } if (child != null) { if (change_callback != null) { change_callback(d.FullName); } } ChangeAssetBundleName(d.FullName, child, change_callback); } } //刷新 AssetDatabase.Refresh(); }
/// <summary> /// 遍历指定目录以及子目录,生成默认数据 /// </summary> static AssetBundleBuildData.AssetBuild.Element GenerateAssetBundleRuleData(string path , emAssetBundleNameRule rule = emAssetBundleNameRule.None) { try { AssetBundleBuildData.AssetBuild.Element result = null; if (Directory.Exists(path)) { if (!EditorCommon.IsIgnoreFolder(path)) { DirectoryInfo dir_info = new DirectoryInfo(path); //生成自身信息 result = new AssetBundleBuildData.AssetBuild.Element(dir_info.Name); result.Rule = (int)rule; result.IsFolder = true; //遍历所有文件夹 foreach (DirectoryInfo d in dir_info.GetDirectories()) { string str = d.ToString(); AssetBundleBuildData.AssetBuild.Element child = GenerateAssetBundleRuleData(str); if (child != null) { result.Add(child); } } //遍历所有子文件 foreach (FileInfo f in dir_info.GetFiles()) //查找文件 { string str = f.ToString(); AssetBundleBuildData.AssetBuild.Element child = GenerateAssetBundleRuleData(str); if (child != null) { result.Add(child); } } } } else if (File.Exists(path)) { if (!EditorCommon.IsIgnoreFile(path)) { //生成自身信息 FileInfo info = new FileInfo(path); result = new AssetBundleBuildData.AssetBuild.Element(info.Name); result.Rule = (int)rule; result.IsFolder = false; } } return(result); } catch (System.Exception e) { Debug.LogWarning(e.Message); } return(null); }
/// <summary> /// 选中的树形节点信息 /// </summary> bool DrawSelectAssetNodeInfo(out emAssetBundleNameRule rule , out bool is_compress, out bool is_native, out bool is_permanent, out bool is_startup_load) { rule = emAssetBundleNameRule.None; is_compress = false; is_native = false; is_permanent = false; is_startup_load = false; if (gui_multi_select_ == null || gui_multi_select_.SelectNodes.Count == 0) { return(false); } var asset_node = gui_multi_select_.SelectNodes[0] as AssetNode; rule = (emAssetBundleNameRule)asset_node.Element.Rule; is_compress = asset_node.Element.IsCompress; is_native = asset_node.Element.IsNative; is_permanent = asset_node.Element.IsPermanent; is_startup_load = asset_node.Element.IsStartupLoad; GUILayout.BeginVertical(); //打包规则 GUILayout.BeginHorizontal(); GUILayout.Label("打包规则", GUILayout.Width(50f), GUILayout.MaxHeight(16f)); emAssetBundleNameRule select_rule = (emAssetBundleNameRule)EditorGUILayout.EnumPopup("", rule, GUILayout.MaxWidth(150f), GUILayout.MaxHeight(16f)); GUILayout.EndHorizontal(); var config = AssetBundleBuildWindow.Instance.asset_bundle_build_.Data; bool is_compress_op = is_compress; bool is_native_op = is_native; bool is_permanent_op = is_permanent; bool is_startup_load_op = is_startup_load; if (select_rule == emAssetBundleNameRule.SingleFile || select_rule == emAssetBundleNameRule.Folder) { is_compress_op = GUILayoutHelper.Toggle(is_compress_op, "压缩", config.IsAllCompress); is_native_op = GUILayoutHelper.Toggle(is_native_op, "打包到安装包", config.IsAllNative); is_permanent_op = GUILayout.Toggle(is_permanent_op, "常驻内存"); is_startup_load_op = GUILayout.Toggle(is_startup_load_op, "启动时加载"); } if (asset_node != null && asset_node.GranularityDetails != null) { GUILayout.Space(20f); GUILayout.Label("粒度详细引用信息", "OL Title"); GUILayout.TextArea(asset_node.GranularityDetails); } GUILayout.EndVertical(); if (select_rule != rule || is_compress != is_compress_op || is_native != is_native_op || is_permanent != is_permanent_op || is_startup_load != is_startup_load_op) { rule = select_rule; is_compress = is_compress_op; is_native = is_native_op; is_permanent = is_permanent_op; is_startup_load = is_startup_load_op; return(true); } return(false); }