Example #1
0
        /// <summary>
        ///
        /// </summary>
        void Build()
        {
            AssetNodeGroup group = new AssetNodeGroup();

            group.Root = new AssetNode();
            group.Root.Build(asset_bundle_build_.Data.Assets.Root, 0);

            gui_multi_select_ = new GUILayoutMultiSelectGroup(group);
        }
        /// <summary>
        ///
        /// </summary>
        void Build()
        {
            AssetNodeGroup group = new AssetNodeGroup();

            group.Root = new AssetNode();
            group.Root.Build(asset_bundle_build_.Data.Assets.Root, 0);
            gui_multi_select_ = new GUILayoutMultiSelectGroup(group);

            build_start_full_path_ = asset_bundle_build_.BuildStartFullPath;
        }
Example #3
0
        /// <summary>
        ///   加载粒度信息
        /// </summary>
        void LoadAssetBundleGranularityInfo()
        {
            Dictionary <string, int> granularity_table = new Dictionary <string, int>();

            //载入ResourcesManifest文件
            ResourcesManifest resoureces_manifest = new ResourcesManifest();

            resoureces_manifest.Load(EditorCommon.RESOURCES_MANIFEST_FILE_PATH);
            if (resoureces_manifest.Data.AssetBundles == null || resoureces_manifest.Data.AssetBundles.Count == 0)
            {
                return;
            }

            //载入AssetBunbleManifest
            string full_name             = EditorCommon.MAIN_MANIFEST_FILE_PATH;
            AssetBundleManifest manifest = Common.LoadMainManifestByPath(full_name);

            if (manifest == null)
            {
                return;
            }

            //遍历AssetBundle
            foreach (var ab_name in manifest.GetAllAssetBundles())
            {
                AssetBundle ab = EditorCommon.LoadAssetBundleFromName(ab_name);
                if (ab != null)
                {
                    //获得所有的AssetBundle依赖
                    List <string> de_abs = new List <string>(manifest.GetAllDependencies(ab_name));
                    //获得所有依赖的AssetBundle的Asset
                    List <string> de_assets = new List <string>();
                    foreach (var ab_name1 in de_abs)
                    {
                        AssetBundle ab1 = EditorCommon.LoadAssetBundleFromName(ab_name1);
                        if (ab1 != null)
                        {
                            de_assets.AddRange(ab1.GetAllAssetNames());
                            ab1.Unload(false);
                        }
                    }

                    //获得所有的Asset
                    List <string> result = new List <string>();
                    List <string> assets = new List <string>(ab.GetAllAssetNames());
                    SearchValidAsset(assets, de_assets, ref result);

                    foreach (var name in result)
                    {
                        if (granularity_table.ContainsKey(name))
                        {
                            granularity_table[name] = granularity_table[name] + 1;
                        }
                        else
                        {
                            granularity_table.Add(name, 1);
                        }
                    }

                    ab.Unload(false);
                }
            }

            //刷新UI数据
            AssetNodeGroup group = gui_multi_select_.Group as AssetNodeGroup;

            group.Root.RefreshGranularity("assets", granularity_table);
        }
        /// <summary>
        ///   加载粒度信息
        /// </summary>
        void LoadGranularityInfo(bool show_details, Action <string, float> progress_report)
        {
            Dictionary <string, string> granularity_details_table = null;

            if (show_details)
            {
                granularity_details_table = new Dictionary <string, string>(16384);
            }
            Dictionary <string, int> granularity_table = new Dictionary <string, int>(16384);

            //载入ResourcesManifest文件
            ResourcesManifest resoureces_manifest = new ResourcesManifest();

            resoureces_manifest.Load(EditorCommon.RESOURCES_MANIFEST_FILE_PATH);
            if (resoureces_manifest.Data.AssetBundles == null || resoureces_manifest.Data.AssetBundles.Count == 0)
            {
                return;
            }

            //载入AssetBunbleManifest
            string full_name             = EditorCommon.MAIN_MANIFEST_FILE_PATH;
            AssetBundleManifest manifest = Common.LoadMainManifestByPath(full_name);

            if (manifest == null)
            {
                return;
            }

            var all_asset_bundle_names = manifest.GetAllAssetBundles();

            //遍历AssetBundle,并载入所有AssetBundle
            float count   = all_asset_bundle_names.Length;
            float current = 0;
            Dictionary <string, AssetBundle> all_ab = new Dictionary <string, AssetBundle>(all_asset_bundle_names.Length);

            foreach (var ab_name in all_asset_bundle_names)
            {
                if (progress_report != null)
                {
                    progress_report("正在加载 " + ab_name, ++current / count);
                }

                AssetBundle ab = EditorCommon.LoadAssetBundleFromName(ab_name);
                all_ab.Add(ab_name, ab);
            }

            //遍历所有ab包,计算粒度
            HashSet <string> result          = new HashSet <string>();
            HashSet <string> dep_asset_names = new HashSet <string>();

            count   = all_ab.Count;
            current = 0;
            foreach (var ab in all_ab)
            {
                string      ab_name     = ab.Key;
                AssetBundle assetbundle = ab.Value;

                if (progress_report != null)
                {
                    progress_report("正在分析 " + ab_name, ++current / count);
                }

                //获得所有的AssetBundle依赖
                string[] dep_ab_names = manifest.GetAllDependencies(ab_name);
                //获得所有依赖的AssetBundle的Asset
                dep_asset_names.Clear();
                foreach (var dep_name in dep_ab_names)
                {
                    AssetBundle dep_ab = null;
                    if (all_ab.TryGetValue(dep_name, out dep_ab))
                    {
                        string[] asset_names = dep_ab.GetAllAssetNames();
                        for (int i = 0; i < asset_names.Length; ++i)
                        {
                            dep_asset_names.Add(asset_names[i]);
                        }
                    }
                }

                //搜寻所有有效的资源
                result.Clear();
                List <string> assets = new List <string>(assetbundle.GetAllAssetNames());
                SearchValidAsset(assets, dep_asset_names, ref result);

                //设置粒度值
                foreach (var name in result)
                {
                    if (granularity_table.ContainsKey(name))
                    {
                        granularity_table[name] = granularity_table[name] + 1;
                    }
                    else
                    {
                        granularity_table.Add(name, 1);
                    }

                    if (granularity_details_table != null)
                    {
                        if (!granularity_details_table.ContainsKey(name))
                        {
                            granularity_details_table.Add(name, "");
                        }
                        granularity_details_table[name] = granularity_details_table[name] + ab_name + "\n";
                    }
                }
                result.Clear();
            }

            //卸载所有AssetBundle
            foreach (var ab in all_ab)
            {
                ab.Value.Unload(true);
            }
            all_ab.Clear();

            //刷新UI数据
            string         path  = asset_bundle_build_.Data.BuildStartLocalPath.ToLower();
            AssetNodeGroup group = gui_multi_select_.Group as AssetNodeGroup;

            current = 0;
            count   = asset_bundle_build_.Data.Assets.Root.Count();
            RefreshGranularity(granularity_table, granularity_details_table, path, group.Root, (name) =>
            {
                if (progress_report != null)
                {
                    progress_report("正在刷新 " + name, ++current / count);
                }
            });
        }