Beispiel #1
0
    private static void CreateFunctionZipAndJson(ExcelWorksheet worksheet, string resId)
    {
//        1内容 2函数	3黑名单
        var row = worksheet.Dimension.End.Row;

        List <BundleFilter> filterList = new List <BundleFilter>();
        BundleFilter        filter     = null;

        for (int i = 2; i <= row; i++)
        {
            object date = worksheet.Cells[i, 2].Value;
            if (date != null)
            {
                filter = new BundleFilter();
                filterList.Add(filter);

                filter.Id = date.ToString();

                filter.BlackList = new BlackList();
                filter.WhiteList = new WhiteList();

                AddToNameList(filter.BlackList, worksheet.Cells[i, 3].Value);
            }
            else
            {
                AddToNameList(filter.BlackList, worksheet.Cells[i, 3].Value);
            }
        }

        Type type = Type.GetType("PackageManager");

        foreach (var bundleFilter in filterList)
        {
            MethodInfo method = type.GetMethod(bundleFilter.Id, BindingFlags.Static | BindingFlags.NonPublic);
            method.Invoke(null, new object[] { bundleFilter.BlackList });
        }
    }
Beispiel #2
0
    private static void CreateSpecial(ExcelWorksheet worksheet, string resId)
    {
        ResIndex resIndex = new ResIndex();

        resIndex.packageDict = new Dictionary <string, ResPack>();

//        1内容	2筛选路径	3白名单	4黑名单 5ID
        var row = worksheet.Dimension.End.Row;

        List <BundleFilter> filterList = new List <BundleFilter>();
        BundleFilter        filter     = null;

        for (int i = 2; i < row; i++)
        {
            object date = worksheet.Cells[i, 2].Value;
            if (date != null)
            {
                filter = new BundleFilter();
                filterList.Add(filter);
                filter.DirPath = date.ToString().Replace("\\", "/");

                string rootFolder = filter.DirPath;

                rootFolder = PackageManager.GetAssetBundleDir() + "/" + rootFolder;

                filter.BlackList = new BlackList();
                filter.WhiteList = new WhiteList();

                filter.BlackList.RootFolder = rootFolder;
                filter.WhiteList.RootFolder = rootFolder;

                AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value);
                AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value);

                filter.Id = worksheet.Cells[i, 5].Value.ToString();
            }
            else
            {
                AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value);
                AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value);
            }
        }

        Dictionary <string, FileInfo> fileDict = new Dictionary <string, FileInfo>();

        foreach (var bundleFilter in filterList)
        {
            List <FileInfo> files = bundleFilter.SearchFile();
            foreach (var fileInfo in files)
            {
                string key = fileInfo.FullName.Replace("\\", "/");
                if (!fileDict.ContainsKey(key))
                {
                    fileDict.Add(key, fileInfo);
                }
            }
            string releasePath = "AssetBundles/" + PackageManager.SystemTag;

            ResPack resPack = new ResPack();
            resPack.id           = bundleFilter.Id;
            resPack.downloadPath = PackageManager.GetPackageStorePath() + "/" + resId;
            resPack.releasePath  = releasePath;
            resPack.items        = new List <ResItem>();
            resIndex.packageDict.Add(resPack.id, resPack);
            foreach (var fileInfo in fileDict)
            {
                ResItem resItem = new ResItem();
                resItem.Path        = GetRelatePath(fileInfo.Value.FullName);
                resItem.Md5         = MD5Util.Get(fileInfo.Key);
                resItem.Size        = fileInfo.Value.Length;
                resPack.packageType = FileType.Original;
                resPack.items.Add(resItem);

                CopyFile(fileInfo.Value.FullName, PackageManager.OutputPath + resId + "/" + resItem.Path);
            }
        }

        string json = JsonConvert.SerializeObject(resIndex, Formatting.Indented);

        FileUtil.SaveFileText(PackageManager.OutputPath, resId + ".json", json);
    }
Beispiel #3
0
    public static void CreateSingleZipAndJson(ExcelWorksheet worksheet, string resId)
    {
        ResIndex resIndex = new ResIndex();

//        1内容	2筛选路径 3白名单 4黑名单
        var row = worksheet.Dimension.End.Row;

        List <BundleFilter> filterList = new List <BundleFilter>();
        BundleFilter        filter     = null;

        for (int i = 2; i < row; i++)
        {
            object date = worksheet.Cells[i, 2].Value;
            if (date != null)
            {
                filter = new BundleFilter();
                filterList.Add(filter);
                filter.DirPath = date.ToString();

                string rootFolder = filter.DirPath;

                rootFolder = PackageManager.GetAssetBundleDir() + "/" + rootFolder;

                filter.BlackList = new BlackList();
                filter.WhiteList = new WhiteList();

                filter.BlackList.RootFolder = rootFolder;
                filter.WhiteList.RootFolder = rootFolder;

                AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value);
                AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value);
            }
            else
            {
                AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value);
                AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value);
            }
        }

        resIndex.belong      = resId;
        resIndex.language    = PackageManager.Language;
        resIndex.packageDict = new Dictionary <string, ResPack>();

        Dictionary <string, FileInfo> fileDict = new Dictionary <string, FileInfo>();

        if (resId == ResPath.AppStart)
        {
            //把共享音频放到AppStart里面下载
            string root = PackageManager.GetAssetBundleDir();
            foreach (var id in PackageManager.sharedAudioDict)
            {
                FileInfo fileInfo = new FileInfo(root + "/story/dubbing/" + id.Key + ".bytes");
                string   key      = fileInfo.FullName.Replace("\\", "/");
                fileDict.Add(key, fileInfo);
            }
        }

        foreach (var bundleFilter in filterList)
        {
            List <FileInfo> files = bundleFilter.SearchFile();
            foreach (var fileInfo in files)
            {
                string key = fileInfo.FullName.Replace("\\", "/");
                if (!fileDict.ContainsKey(key))
                {
                    fileDict.Add(key, fileInfo);
                }
            }
        }

        ResPack resPack = new ResPack();

        resPack.id           = resIndex.belong;
        resPack.releasePath  = "AssetBundles/" + PackageManager.SystemTag;
        resPack.downloadPath = PackageManager.GetPackageStorePath() + "/" + resIndex.belong + "/" + resPack.id + ".zip";
        resPack.items        = new List <ResItem>();
        resPack.packageType  = FileType.Zip;
        resIndex.packageDict.Add(resPack.id, resPack);
        foreach (var fileInfo in fileDict)
        {
            ResItem resItem = new ResItem();
            resItem.Path = GetRelatePath(fileInfo.Value.FullName);
            resItem.Md5  = MD5Util.Get(fileInfo.Key);
            resItem.Size = fileInfo.Value.Length;
            resPack.items.Add(resItem);
        }

        DeleteFile(resIndex);
        CopyFile(resIndex);

        string packagePath = PackageManager.OutputPath + resPack.id;

        if (Directory.Exists(packagePath))
        {
            Directory.Delete(packagePath, true);
        }
        Directory.CreateDirectory(packagePath);

        string zipFileName = packagePath + "/" + resPack.id + ".zip";

        string destDir = PackageManager.GetPackageDir() + "/" + resPack.id;

        string[] fileList = Directory.GetFiles(destDir, "*", SearchOption.AllDirectories);

        EditorUtility.DisplayProgressBar("压缩", "正在压缩文件(" + Path.GetFileName(packagePath), 1);

        List <string> pathInZipList = new List <string>();

        for (int i = 0; i < fileList.Length; i++)
        {
            string str = Path.GetDirectoryName(fileList[i]);
            str = str.Replace("\\", "/");
            str = str.Replace(PackageManager.GetPackageDir().Replace("\\", "/") + "/" + resPack.id + "/", "");
            pathInZipList.Add(str + "/");
        }

        ZipUtil.CreateZip(fileList, zipFileName, pathInZipList.ToArray(), 0);

        EditorUtility.ClearProgressBar();

        resPack.packageMd5  = MD5Util.Get(zipFileName);
        resPack.packageSize = new FileInfo(zipFileName).Length;
        string json = JsonConvert.SerializeObject(resIndex, Formatting.Indented);

        FileUtil.SaveFileText(PackageManager.OutputPath, resId + ".json", json);
    }
Beispiel #4
0
    public static void CreateMultiZipAndJson(ExcelWorksheet worksheet, string resId)
    {
        Stopwatch sw = Stopwatch.StartNew();

        ResIndex resIndex = new ResIndex();

//        1内容	2筛选路径	3白名单	4黑名单 5ID
        var row = worksheet.Dimension.End.Row;

        List <BundleFilter> filterList = new List <BundleFilter>();
        BundleFilter        filter     = null;

        for (int i = 2; i < row; i++)
        {
            object date = worksheet.Cells[i, 2].Value;
            if (date != null)
            {
                filter = new BundleFilter();
                filterList.Add(filter);
                filter.DirPath = date.ToString().Replace("\\", "/");

                string rootFolder = filter.DirPath;

                rootFolder = PackageManager.GetAssetBundleDir() + "/" + rootFolder;

                filter.BlackList = new BlackList();
                filter.WhiteList = new WhiteList();

                filter.BlackList.RootFolder = rootFolder;
                filter.WhiteList.RootFolder = rootFolder;

                AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value);
                AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value);

                filter.Id = worksheet.Cells[i, 5].Value.ToString();
            }
            else
            {
                AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value);
                AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value);
            }
        }

        resIndex.belong      = resId;
        resIndex.language    = PackageManager.Language;
        resIndex.packageDict = new Dictionary <string, ResPack>();

        Debug.Log("<color='#00ff00'>" + resId + "时间1->" + sw.ElapsedMilliseconds + "</color>");

        DeleteFile(resIndex);

        Debug.Log("<color='#00ff00'>" + resId + "时间2.1->" + sw.ElapsedMilliseconds + "</color>");

        string packagePath = PackageManager.OutputPath + resId;

        if (Directory.Exists(packagePath))
        {
            Directory.Delete(packagePath, true);
        }
        Directory.CreateDirectory(packagePath);

        string releasePath = "AssetBundles/" + PackageManager.SystemTag;

        foreach (var bundleFilter in filterList)
        {
            List <FileInfo> files = bundleFilter.SearchFile();

            ResPack resPack = new ResPack();
            resPack.id           = bundleFilter.Id;
            resPack.releasePath  = releasePath;
            resPack.packageType  = FileType.Zip;
            resPack.downloadPath =
                PackageManager.GetPackageStorePath() + "/" + resIndex.belong + "/" + resPack.id + ".zip";
            resPack.items = new List <ResItem>();
            resIndex.packageDict.Add(resPack.id, resPack);

            foreach (var fileInfo in files)
            {
                ResItem resItem = new ResItem();
                resItem.Path = GetRelatePath(fileInfo.FullName);
                resItem.Md5  = MD5Util.Get(fileInfo.FullName);
                resItem.Size = fileInfo.Length;
                resPack.items.Add(resItem);

                CopyFile(fileInfo.FullName, PackageManager.GetPackageDir() + "/" + resId + "/" + resItem.Path);
            }
        }

        Debug.Log("<color='#00ff00'>" + resId + "时间2.2->" + sw.ElapsedMilliseconds + "</color>");

        foreach (var resPack in resIndex.packageDict)
        {
            string zipFileName = packagePath + "/" + resPack.Value.id + ".zip";

            List <string> fileList = new List <string>();
            string        rootPath = PackageManager.GetPackageDir().Replace("\\", "/") + "/" + resId + "/";
            foreach (var item in resPack.Value.items)
            {
                fileList.Add(rootPath + item.Path);
            }

            EditorUtility.DisplayProgressBar("压缩", "正在压缩文件(" + Path.GetFileName(packagePath) + ")", 1);

            List <string> pathInZipList = new List <string>();
            for (int i = 0; i < fileList.Count; i++)
            {
                string str = Path.GetDirectoryName(fileList[i]);
                str = str.Replace("\\", "/");
                str = str.Replace(
                    PackageManager.GetPackageDir().Replace("\\", "/") + "/" + resId + "/", "");

                pathInZipList.Add(str + "/");
            }

            ZipUtil.CreateZip(fileList.ToArray(), zipFileName, pathInZipList.ToArray(), 0);

            EditorUtility.ClearProgressBar();

            resPack.Value.packageMd5  = MD5Util.Get(zipFileName);
            resPack.Value.packageSize = new FileInfo(zipFileName).Length;
        }

        Debug.Log("<color='#00ff00'>" + resId + "时间3->" + sw.ElapsedMilliseconds + "</color>");

        string json = JsonConvert.SerializeObject(resIndex, Formatting.Indented);

        FileUtil.SaveFileText(PackageManager.OutputPath, resId + ".json", json);
    }
Beispiel #5
0
    public override void OnInspectorGUI()
    {
        if (configs == null)
        {
            configs = (BundleConfig)target;
        }

        scrollView = GUILayout.BeginScrollView(scrollView);
        EditorGUILayout.HelpBox(string.Format(note, configs.filters.Count), MessageType.Info);
        GUILayout.Space(10);

        GUILayout.BeginVertical();
        #region 添加、清空
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        GUI.color = Color.green;
        if (GUILayout.Button("添加", GUILayout.Width(80)))
        {
            BundleFilter filter = new BundleFilter();
            configs.filters.Add(filter);
        }

        GUI.color = Color.red;
        if (GUILayout.Button("清空", GUILayout.Width(80)))
        {
            if (EditorUtility.DisplayDialog("", "确认要删除所有配置?", "确认", "取消"))
            {
                configs.filters.Clear();
            }
        }
        GUI.color = Color.white;
        GUILayout.EndHorizontal();
        #endregion

        GUILayout.Space(10);

        int count = configs.filters.Count;
        for (int i = 0; i < count; i++)
        {
            GUI.backgroundColor = Color.gray;

            BundleFilter filter = configs.filters[i];
            if (GUILayout.Button("AssetPath: " + filter.assetPath + "(" + (filter.isExpand ? "OL Minus" : "OL Plus") + ")"))
            {
                filter.isExpand = !filter.isExpand;
            }

            if (filter.isExpand)
            {
                GUILayout.BeginHorizontal();
                filter.assetPath = EditorGUILayout.TextField("Asset Path:", filter.assetPath);
                //GUILayout.FlexibleSpace();
                if (GUILayout.Button("Select", GUILayout.Width(50)))
                {
                    string p = EditorUtility.OpenFolderPanel("选择文件夹", Application.dataPath, "");
                    if (!string.IsNullOrEmpty(p))
                    {
                        if (p.Contains("Assets/"))
                        {
                            string[] ps = p.Split(new[] { "Assets/" }, StringSplitOptions.None);
                            filter.assetPath = "Assets/" + ps[1];
                        }
                    }
                }

                GUI.color = Color.red;
                if (GUILayout.Button("X", GUILayout.Width(30)))
                {
                    delNo = i + 1;
                }
                GUI.color = Color.white;
                GUILayout.EndHorizontal();

                filter.isFolderPack = EditorGUILayout.Toggle("IsFolderPack:", filter.isFolderPack);
                if (filter.isFolderPack)
                {
                    filter.isChildFolder = EditorGUILayout.Toggle("IsChildFolder:", filter.isChildFolder);
                    if (filter.isChildFolder)
                    {
                        GUILayout.Label("<!--当前把Asset Path下每个子文件夹打成一个Bundle.-->");
                    }
                    else
                    {
                        GUILayout.Label("<!--当前把Asset Path下所有后缀资源打成一个Bundle.-->");
                    }
                }
                else
                {
                    GUILayout.Label("<!-------当前按照后缀打包-------->");
                    filter.extension = EditorGUILayout.TextField("Extension:", filter.extension);
                    filter.isSingle  = EditorGUILayout.Toggle("IsSingle:", filter.isSingle);
                    filter.isDepend  = EditorGUILayout.Toggle("IsDepend:", filter.isDepend);

                    if (filter.isDepend)
                    {
                        filter.isDependSplit = EditorGUILayout.Toggle("IsDependSplit:", filter.isDependSplit);
                        if (!filter.isDependSplit)
                        {
                            filter.dependName = EditorGUILayout.TextField("DependName", filter.dependName);
                        }
                    }
                }
            }
            GUI.backgroundColor = Color.white;
            GUILayout.Space(5);
        }

        if (delNo > 0 && delNo <= configs.filters.Count)
        {
            configs.filters.RemoveAt(delNo - 1);
        }
        delNo = 0;

        GUILayout.EndVertical();
        GUILayout.EndScrollView();

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
        serializedObject.ApplyModifiedProperties();
    }