Пример #1
0
        /// <summary>
        /// 总览
        /// </summary>
        private void drawOverview()
        {
            ABMainChecker mainCheckr = ABMainChecker.MainChecker;

            GUILayout.BeginHorizontal();
            if (GUILayout.Button(string.Format("总资源数:{0}", mainCheckr.BundleList.Count), GUILayout.Height(50)))
            {
                scrollPos = Vector2.zero;
                curView   = EView.ALLAsset;
            }

            if (GUILayout.Button(string.Format("冗余资源数:{0}", redundancyDic.Count), GUILayout.Height(50)))
            {
                scrollPos      = Vector2.zero;
                redundancyList = redundancyDic.Values.ToList();
                redundancyList.Sort((x, y) => (new CaseInsensitiveComparer()).Compare(x.BundleName, y.BundleName));

                curView = EView.RedundancyAssets;
            }

            if (GUILayout.Button(string.Format("丢失AB数:{0}", mainCheckr.MissingRes.Count), GUILayout.Height(50)))
            {
                scrollPos   = Vector2.zero;
                selectAsset = "";
                mainCheckr.MissingRes.Sort((x, y) => (new CaseInsensitiveComparer()).Compare(x.Name, y.Name));
                curView = EView.MissingAsset;
            }

            GUILayout.EndHorizontal();
        }
Пример #2
0
        private void loadAssetBundle(EditorBundleBean bundle)
        {
            loadIndex++;
            EditorUtility.DisplayProgressBar("分析中", "分析AssetBundle资源...", loadIndex / loadCount);

            string manifest = string.Concat(bundle.BundlePath, ".manifest");

            if (!File.Exists(manifest))
            {
                Debug.LogWarning("Cant find manifest ! " + manifest + "[" + bundle.BundleName + "]");
                return;
            }

            manifest = File.ReadAllText(manifest);
            string[] manifestInfoArr = manifest.Split('\n');

            //查找包含资源
            string[]             bundInfo  = getBundleInfo(manifestInfoArr, "Assets:");
            List <ResoucresBean> allAssets = bundle.GetAllAssets();

            ABMainChecker mainCheck = ABMainChecker.MainChecker;

            foreach (string assetPath in bundInfo)
            {
                //string assetName = Path.GetFileName(assetPath);
                ResoucresBean rb = null;
                if (!mainCheck.ResourceDic.TryGetValue(assetPath, out rb))
                {
                    rb = new ResoucresBean(assetPath);
                    mainCheck.ResourceDic[assetPath] = rb;
                }

                if (!rb.IncludeBundles.Contains(bundle))
                {
                    rb.IncludeBundles.Add(bundle);
                }

                allAssets.Add(rb);
            }

            //查找依赖
            bundInfo = getBundleInfo(manifestInfoArr, "Dependencies:");
            Dictionary <string, EditorBundleBean> bundles = ABMainChecker.MainChecker.BundleList;
            List <EditorBundleBean> depBundles            = bundle.GetAllDependencies();

            foreach (string curAssetPath in bundInfo)
            {
                EditorBundleBean depBundle = null;
                string           assetPath = GetRealBundlePath(curAssetPath);
                if (!bundles.TryGetValue(assetPath, out depBundle))
                {
                    depBundle          = new EditorBundleBean(assetPath);
                    bundles[assetPath] = depBundle;
                    loadAssetBundle(depBundle);
                }

                //依赖记录
                if (!depBundles.Contains(depBundle))
                {
                    depBundles.Add(depBundle);
                }

                //被依赖
                List <EditorBundleBean> beDepBundles = depBundle.GetBedependencies();
                if (!beDepBundles.Contains(bundle))
                {
                    beDepBundles.Add(bundle);
                }
            }
        }
Пример #3
0
 public static void ShowChecker()
 {
     MainChecker = EditorWindow.GetWindow <ABMainChecker>();
     MainChecker.OnInit();
     MainChecker.Show();
 }