Пример #1
0
 /// <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;
         }
     }
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
                }
            }
        }
Пример #5
0
        /// <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();
        }
Пример #6
0
        /// <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);
        }