Exemple #1
0
    //总入口
    public static void Build()
    {
        //保留原版本号
        string oldvesion = PlayerSettings.bundleVersion;
        bool   ret       = BuildBundle();

        if (ret)
        {
            ret = BuildPlayer();
        }
        if (ret)
        {
            //成功写入版本号文件
            WriteVersionFile();
            //保存配置文件
            GBuilderConfigure.Save();
        }
        //发布资源
        PublishPackage(ret);

        //判断编译结果
        RevertVersion(ret, oldvesion);
    }
    private void OnGUI()
    {
        Event uievent = Event.current;

        EditorGUILayout.BeginVertical();
        // 设置目标平台
        GBuilderConfigure.CurrentBuildTarget = (BuildTarget)GUIHelper.DrawEnumPopup("BuildTarget:", GBuilderConfigure.CurrentBuildTarget, titleWidth);
        if (GBuilderConfigure.CurrentBuildTarget != GBuilderConfigure.Configure.AppBuildTarget)
        {
            GBuilderConfigure.Configure.AppBuildTarget = GBuilderConfigure.CurrentBuildTarget;
        }

        if (GUIHelper.DrawFold("PathSetting", "PathSetting"))
        {
            EditorGUILayout.Separator();
            // 设置unity目录
            GUIHelper.DrawFilePick("UnityPath:", ref GBuilderConfigure.Configure.UnityPath, "", titleWidth, "Uniy路径");
            EditorGUILayout.Separator();
            // 设置unity目录
            GUIHelper.DrawFilePick("XcodePath:", ref GBuilderConfigure.Configure.XcodePath, "", titleWidth, "Xcode路径");
            EditorGUILayout.Separator();
            GUIHelper.DrawFolderPick("ProjectPath:", ref GBuilderConfigure.Configure.ProjectPath, Application.dataPath + "/../", titleWidth, "工程目录");
            EditorGUILayout.Separator();
            GUIHelper.DrawFolderPick("LocalBundlePath:", ref GBuilderConfigure.Configure.LocalBundlePath, PathHelper.ProjectPlatformPath("AssetBundleData", GBuilderConfigure.CurrentBuildTarget), titleWidth, "资源的生成目录");
            EditorGUILayout.Separator();
            GUIHelper.DrawFolderPick("BuildPath:", ref GBuilderConfigure.Configure.BuildPath, PathHelper.ProjectPlatformPath("Build", GBuilderConfigure.CurrentBuildTarget), titleWidth, "App生成生成目录");
            EditorGUILayout.Separator();
            GUIHelper.DrawFolderPick("ReportPath:", ref GBuilderConfigure.Configure.ReportPath, PathHelper.ProjectPlatformPath("BuildReport", GBuilderConfigure.CurrentBuildTarget), titleWidth, "编译报告生成目录");
            EditorGUILayout.Separator();
            GUIHelper.DrawFolderPick("AppReleasePath:", ref GBuilderConfigure.Configure.AppReleasePath, PathHelper.ProjectPlatformPath("AppRelease", GBuilderConfigure.CurrentBuildTarget), titleWidth, "应用发布目录");
            EditorGUILayout.Separator();
            GUIHelper.DrawFolderPick("ResReleasePath:", ref GBuilderConfigure.Configure.ResReleasePath, PathHelper.ProjectPlatformPath("ResRelease", GBuilderConfigure.CurrentBuildTarget), titleWidth, "资源发布目录");
            EditorGUILayout.Separator();
        }
        if (GUIHelper.DrawFold("ConfigureSetting", "ConfigureSetting"))
        {
            GUIHelper.DrawTextField("AppName", ref GBuilderConfigure.Configure.AppName, "game", 80, "程序名称");
            EditorGUILayout.Separator();
            GUIHelper.DrawIntField("ParentResVersion", ref GBuilderConfigure.Configure.ParentResVersion, 80, "上次打包资源版本");
            EditorGUILayout.Separator();
            GUIHelper.DrawIntField("ResVersion", ref GBuilderConfigure.Configure.ResVersion, 80, "资源版本");
            EditorGUILayout.Separator();
            GUIHelper.DrawIntField("SvnVersion", ref GBuilderConfigure.Configure.SvnVersion, 80, "Svn版本");
            EditorGUILayout.Separator();
            GUIHelper.DrawIntField("CodeVersion", ref GBuilderConfigure.Configure.CodeVersion, 80, "代码版本");
            EditorGUILayout.Separator();
            GUIHelper.DrawIntField("VersionPrefix", ref GBuilderConfigure.Configure.VersionPrefix, 80, "版本前缀 大版本号");
            EditorGUILayout.Separator();
            GUIHelper.DrawLabel("PublishVersion", GBuilderConfigure.Configure.PublishVersion);
            EditorGUILayout.Separator();
            GUIHelper.DrawTextField("ResServerURL", ref GBuilderConfigure.Configure.ResServerURL, "", 80, "资源下载服务器地址");
            EditorGUILayout.Separator();
            GUIHelper.DrawTextField("AppServerURL", ref GBuilderConfigure.Configure.AppServerURL, "", 80, "App下载服务器地址");
        }

        // hotFix
        EditorGUILayout.Separator();
        GUIHelper.DrawToggle("HotFix", ref GBuilderConfigure.Configure.HotFix, (fix) => {
            BuildTargetGroup buildTargetGroup = GBuilderConfigure.Configure.AppBuildTarget == BuildTarget.Android ? BuildTargetGroup.Android : GBuilderConfigure.Configure.AppBuildTarget == BuildTarget.iOS ? BuildTargetGroup.iOS : BuildTargetGroup.Standalone;
            string oldDefineSymbols           = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup).Trim();
            int hotfixindex = oldDefineSymbols.IndexOf("HOTFIX");
            if (hotfixindex >= 0 && GBuilderConfigure.Configure.HotFix == false)
            {
                string newDefineSymbols = "";
                if (oldDefineSymbols.IndexOf(";HOTFIX;") >= 0)
                {
                    newDefineSymbols = oldDefineSymbols.Replace(";HOTFIX;", ";");
                }
                else if (oldDefineSymbols.IndexOf(";HOTFIX") >= 0)
                {
                    newDefineSymbols = oldDefineSymbols.Replace(";HOTFIX", "");
                }
                else if (oldDefineSymbols.IndexOf("HOTFIX;") >= 0)
                {
                    newDefineSymbols = oldDefineSymbols.Replace("HOTFIX;", "");
                }
                ;
                PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, newDefineSymbols);
            }
            else if (hotfixindex < 0 && GBuilderConfigure.Configure.HotFix)
            {
                string newDefineSymbols = oldDefineSymbols + ";HOTFIX";
                PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, newDefineSymbols);
            }
        }, 80, "是否开启热更新");
        EditorGUILayout.Separator();
        // appUpdate
        GUIHelper.DrawToggle("AppUpdate", ref GBuilderConfigure.Configure.AppUpdate, null, 80, "是否更新大版本");
        EditorGUILayout.Separator();
        GUIHelper.DrawToggle("BuildAppX86", ref GBuilderConfigure.Configure.BuildAppX86, null, 80, "是否支持X86(关闭可以加快生成速度)");
        EditorGUILayout.Separator();
        // publish
        GUIHelper.DrawToggle("PublishRes", ref GBuilderConfigure.Configure.PublishRes, null, 80, "是否拷贝资源到发布目录");

        EditorGUILayout.Separator();

        if (GUIHelper.DrawFold("ScenesInBuild", "Scenes In Build", 80, "打包场景", true))
        {
            sceneListPos = GUILayout.BeginScrollView(sceneListPos, GUILayout.MaxHeight(200));
            EditorGUILayout.BeginHorizontal();
            GUIHelper.DrawToolbar("ShowScenesBar", new string[] { "HideAllScenes", "ShowAllScenes" }, 0, (index) => {
                if (index == 1)
                {
                    AddAllScenes(ref tempStringList);
                }
                if (index == 0)
                {
                    tempStringList.Clear();
                }
            });
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginVertical(GUILayout.MinHeight(100), GUILayout.MaxHeight(200));
            if (GBuilderConfigure.Configure.Scenes.Count == 0 && tempStringList.Count == 0)
            {
                GUILayout.FlexibleSpace();
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                GUILayout.Label("Drag and drop scene assets/folders here");
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();
                GUILayout.FlexibleSpace();
            }
            else
            {
                for (int i = 0; i < GBuilderConfigure.Configure.Scenes.Count; i++)
                {
                    GUIHelper.DrawToggleLeft(GBuilderConfigure.Configure.Scenes[i], GBuilderConfigure.Configure.Scenes[i], true, (check) =>
                    {
                        if (check == false)
                        {
                            GBuilderConfigure.Configure.Scenes.RemoveAt(i);
                        }
                    });
                }
                for (int i = 0; i < tempStringList.Count; i++)
                {
                    if (!GBuilderConfigure.Configure.Scenes.Contains(tempStringList[i]))
                    {
                        GUIHelper.DrawToggleLeft(tempStringList[i], tempStringList[i], false, (check) =>
                        {
                            if (check == true)
                            {
                                GBuilderConfigure.Configure.Scenes.Add(tempStringList[i]);
                            }
                        });
                    }
                }
            }
            EditorGUILayout.EndVertical();
            if (GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition))
            {
                if (uievent.type == EventType.DragUpdated || uievent.type == EventType.DragPerform)
                {
                    if (DragAndDrop.paths.Length > 0)
                    {
                        DragAndDrop.visualMode = DragAndDropVisualMode.Link;
                    }
                }
                if (uievent.type == EventType.DragPerform)
                {
                    DragAndDrop.AcceptDrag();
                    AddScenes(ref GBuilderConfigure.Configure.Scenes, DragAndDrop.paths);
                    GBuilderConfigure.Save();
                    Repaint();
                }
            }
            GUILayout.EndScrollView();
        }

        EditorGUILayout.Separator();
        GBuilderConfigure.Configure.Options = (BuildOptions)GUIHelper.DrawMaskField("Build Options:", (int)GBuilderConfigure.Configure.Options, typeof(BuildOptions));

        EditorGUILayout.Separator();

        if (GUILayout.Button("Save"))
        {
            GBuilderConfigure.Save();
        }

        if (GUILayout.Button("Build Asset Only"))
        {
            GBuilderConfigure.Save();

            if (!EditorUtility.DisplayDialog("Build Asset Only", "Are you sure to build asset only ?", "Yes", "No"))
            {
                return;
            }

            GBuilderConfigure.Save();
        }

        if (GUILayout.Button("Build App Only"))
        {
            GBuilderConfigure.Save();
            if (!EditorUtility.DisplayDialog("Build App Only", "Are you sure to build App only ?", "Yes", "No"))
            {
                return;
            }
            GBuilder.BuildPlayer();
        }

        if (GUILayout.Button("Build Asset And App"))
        {
            GBuilderConfigure.Save();
            if (!EditorUtility.DisplayDialog("Build  Asset And App", "Are you sure to build asset and app?", "Yes", "No"))
            {
                return;
            }
            GBuilder.BuildByConfigure();
        }

        EditorGUILayout.EndVertical();
    }
 private void OnDisable()
 {
     tempStringList = null;
     GBuilderConfigure.Save();
 }