private void OnGUI() { GUILayout.BeginHorizontal(); { #if !ODIN_INSPECTOR GUILayout.Label("缺少Odin!"); #endif #if ODIN_INSPECTOR EXPORT_PATH = BApplication.DevOpsPublishAssetsPath; if (editorScript != null) { //GUILayout.BeginVertical(); SirenixEditorGUI.BeginBox("脚本", true, GUILayout.Width(220), GUILayout.Height(450)); editorScript.OnGUI(); SirenixEditorGUI.EndBox(); //GUILayout.EndVertical(); } // Layout_DrawLineV(Color.white); if (editorAsset != null) { SirenixEditorGUI.BeginBox("资源", true, GUILayout.Width(220), GUILayout.Height(450)); editorAsset.OnGUI(); SirenixEditorGUI.EndBox(); } // Layout_DrawLineV(Color.white); if (editorTable != null) { SirenixEditorGUI.BeginBox("表格", true, GUILayout.Width(200), GUILayout.Height(450)); editorTable.OnGUI(); SirenixEditorGUI.EndBox(); //Layout_DrawLineV(Color.white); } #endif } GUILayout.EndHorizontal(); EditorGUILayoutEx.Layout_DrawLineH(Color.white); //绘制一键导出和构建Editor WebServer GUILayout.BeginHorizontal(); OnGUI_OneKeyExprot(); EditorGUILayoutEx.Layout_DrawLineV(Color.white); OnGUI_PublishEditorService(); GUILayout.EndHorizontal(); }
private void OnGUI() { var allconfigs = HotfixPipelineTools.HotfixFileConfig.GetAllConfig(); if (curSlectConfigItem == null && allconfigs.Length > 0) { curSlectConfigItem = allconfigs[0]; } //绘制config ONGUI_DrawAllConfig(); //排版 EditorGUILayoutEx.Layout_DrawLineH(new Color(1, 1, 1, 0.5f), 2); GUILayout.BeginVertical(); ONGUI_DrawFileList(); GUILayout.EndVertical(); }
private void ONGUI_DrawAllConfig() { GUILayout.BeginVertical(); //渲染所有的配置 EditorGUILayout.LabelField("热更文件配置:"); //添加配置 GUILayout.BeginHorizontal(GUILayout.Width(w)); { // Tag addTag = EditorGUILayout.TextField(addTag, GUILayout.Width(100)); GUILayout.Space(20); //添加 if (GUILayout.Button("添加", GUILayout.Width(40))) { var ret = HotfixPipelineTools.HotfixFileConfig.AddConfigItem(addTag); if (ret) { var config = HotfixPipelineTools.HotfixFileConfig.GetConfig(addTag); config.AddFolderFilter("Assets", ".xxx"); } EditorUtility.DisplayDialog("提示", "添加:" + (ret ? "成功" : "失败"), "OK"); } } GUILayout.EndHorizontal(); //渲染所有的配置 EditorGUILayoutEx.Layout_DrawLineH(Color.white, 2f); GUILayout.BeginHorizontal(); { GUILayout.Label("已存在配置", GUILayout.Width(200)); GUILayout.Label("默认配置类型", GUILayout.Width(200)); } GUILayout.EndHorizontal(); var configs = HotfixPipelineTools.HotfixFileConfig.GetAllConfig(); GUILayout.BeginHorizontal(); { var tags = configs.Select((con) => con.Tag).ToArray(); // if (tags.Length > 0) { curSelectTagIdx = EditorGUILayout.Popup(curSelectTagIdx, tags, GUILayout.Width(200)); } else { GUILayout.Label("无配置", GUILayout.Width(200)); } this.curSlectConfigItem = configs.FirstOrDefault((c) => c.Tag == tags[curSelectTagIdx]); if (curSlectConfigItem == null) { this.curSlectConfigItem = new HotfixFileConfigLogic.HotfixFileConfigItem(); } this.curSlectConfigItem.DefeaultConfigType = (HotfixFileConfigLogic.HotfixFileConfigItem.DefeaultConfigTypeEnum)EditorGUILayout.EnumPopup(this.curSlectConfigItem.DefeaultConfigType, GUILayout.Width(200)); //添加按钮 GUILayout.Space(20); GUI.color = Color.green; if (GUILayout.Button("添加目录", GUILayout.Width(75))) { curSlectConfigItem.AddFolderFilter("null", "xx"); } GUI.color = GUI.backgroundColor; GUILayout.Space(20); GUI.color = Color.red; if (GUILayout.Button("删除", GUILayout.Width(75))) { var ret = EditorUtility.DisplayDialog("提示", "是否删除该配置?", "OK", "Cancel"); if (ret) { HotfixPipelineTools.HotfixFileConfig.RemoveConfigItem(this.curSlectConfigItem.Tag); } } GUI.color = GUI.backgroundColor; } GUILayout.EndHorizontal(); //开始排版 GUILayout.BeginHorizontal(GUILayout.Width(w)); { GUILayout.Label("路径", GUILayout.Width(400)); GUILayout.Space(10); GUILayout.Label("后缀", GUILayout.Width(100)); } GUILayout.EndHorizontal(); //显示所有的floder foreach (var floderFilter in this.curSlectConfigItem.GetFloderFilters()) { GUILayout.BeginHorizontal(GUILayout.Width(w)); { //添加目录 GUILayout.Label(floderFilter.FloderPath, GUILayout.Width(380)); if (GUILayout.Button("...", GUILayout.Width(20))) { var folder = EditorUtility.OpenFolderPanel("选择文件夹", Application.dataPath, ""); floderFilter.FloderPath = folder.Replace(BApplication.ProjectRoot + "/", ""); var files = Directory.GetFiles(floderFilter.FloderPath, "*", SearchOption.AllDirectories); if (files.Length > 0) { floderFilter.FileExtensionName = Path.GetExtension(files[0]); } } GUILayout.Space(10); //添加的后缀名 floderFilter.FileExtensionName = EditorGUILayout.TextField(floderFilter.FileExtensionName, GUILayout.Width(80)); if (!floderFilter.FileExtensionName.StartsWith(".")) { floderFilter.FileExtensionName = ("." + floderFilter.FileExtensionName); } GUILayout.Space(20); GUI.color = Color.red; if (GUILayout.Button("-", GUILayout.Width(20))) { var ret = EditorUtility.DisplayDialog("提示", "是否删除该目录?", "OK", "Cancel"); if (ret) { this.curSlectConfigItem.RemoveFloderFilter(floderFilter.FloderPath); return; } } GUI.color = GUI.backgroundColor; } GUILayout.EndHorizontal(); } if (configs.Length < 10) { GUILayout.Space(20 * (10 - configs.Length)); } GUILayout.EndVertical(); }
/// <summary> /// 绘制文件列表 /// </summary> private void ONGUI_DrawFileList() { if (curSlectConfigItem == null) { return; } GUILayout.BeginHorizontal(); GUILayout.Label("非热更文件:", GUILayout.Width(395)); EditorGUILayoutEx.Layout_DrawLineV(Color.white, 2f); GUILayout.Label("热更文件:", GUILayout.Width(400)); GUILayout.EndHorizontal(); EditorGUILayoutEx.Layout_DrawLineH(Color.white, 2f); GUILayout.BeginHorizontal(); //左边 pos1 = EditorGUILayout.BeginScrollView(pos1, false, false, GUILayout.Width(398), GUILayout.Height(700)); { var hotfixfiles = curSlectConfigItem.GetNotHotfixFiles(); foreach (var file in hotfixfiles) { GUILayout.BeginHorizontal(GUILayout.Width(398)); { GUILayout.Label(file, GUILayout.Width(370)); if (GUILayout.Button(">")) { var ret = EditorUtility.DisplayDialog("提示", "是否添加热更文件?", "OK", "Cancel"); if (ret) { curSlectConfigItem.AddHotfixFile(file); } } } GUILayout.EndHorizontal(); EditorGUILayoutEx.Layout_DrawLineH(Color.grey, 1f); } } EditorGUILayout.EndScrollView(); EditorGUILayoutEx.Layout_DrawLineV(Color.white, 2f); //右边 pos2 = EditorGUILayout.BeginScrollView(pos2, false, false, GUILayout.Width(398), GUILayout.Height(700)); { var nothotfixFiles = curSlectConfigItem.GetHotfixFiles(); for (int i = 0; i < nothotfixFiles.Length; i++) { var file = nothotfixFiles[i]; GUILayout.BeginHorizontal(); { if (GUILayout.Button("<")) { var ret = EditorUtility.DisplayDialog("提示", "是否移除热更列表?", "OK", "Cancel"); if (ret) { curSlectConfigItem.RemoveHotfixFile(file); break; } } GUILayout.Label(file, GUILayout.Width(370)); } GUILayout.EndHorizontal(); EditorGUILayoutEx.Layout_DrawLineH(Color.grey, 1f); } } EditorGUILayout.EndScrollView(); GUILayout.EndHorizontal(); }
/// <summary> /// CI 相关 /// </summary> public void OnGUI_BuildpipelineCI() { GUILayout.BeginVertical(); { var devops_setting = BDEditorApplication.BDFrameWorkFrameEditorSetting.BuildSetting; GUILayout.BeginHorizontal(); { GUILayout.BeginVertical(); GUILayout.Label("资源仓库地址:"); devops_setting.AssetServiceVCSData.Url = EditorGUILayout.TextField("地址", devops_setting.AssetServiceVCSData.Url, GUILayout.Width(350)); devops_setting.AssetServiceVCSData.UserName = EditorGUILayout.TextField("账号", devops_setting.AssetServiceVCSData.UserName, GUILayout.Width(350)); devops_setting.AssetServiceVCSData.Psw = EditorGUILayout.TextField("密码", devops_setting.AssetServiceVCSData.Psw, GUILayout.Width(350)); GUILayout.EndHorizontal(); GUILayout.BeginVertical(); GUILayout.Label("母包仓库地址:"); devops_setting.PackageServiceVCSData.Url = EditorGUILayout.TextField("地址", devops_setting.PackageServiceVCSData.Url, GUILayout.Width(350)); devops_setting.PackageServiceVCSData.UserName = EditorGUILayout.TextField("账号", devops_setting.PackageServiceVCSData.UserName, GUILayout.Width(350)); devops_setting.PackageServiceVCSData.Psw = EditorGUILayout.TextField("密码", devops_setting.PackageServiceVCSData.Psw, GUILayout.Width(350)); GUILayout.EndHorizontal(); } GUILayout.EndHorizontal(); GUILayout.Space(20); GUILayout.Label("支持CI列表:"); EditorGUILayoutEx.Layout_DrawLineH(Color.white, 2f); //获取所有ciapi var ciMethods = DevOpsTools.GetCIApis(); pos = EditorGUILayout.BeginScrollView(pos, GUILayout.Width(850), GUILayout.Height(500)); { foreach (var cim in ciMethods) { var attrs = cim.GetCustomAttributes(false); var ciAttr = attrs[0] as CIAttribute; GUILayout.BeginHorizontal(); { //描述 GUILayout.Label(ciAttr.Des + ":", GUILayout.Width(150)); //函数 var ciName = cim.ReflectedType.FullName + "." + cim.Name; GUILayout.Label(ciName, GUILayout.Width(580)); //按钮 if (GUILayout.Button("复制", GUILayout.Width(50))) { GUIUtility.systemCopyBuffer = ciName; EditorUtility.DisplayDialog("提示", "复制成功!\n" + cim.Name, "OK"); } if (GUILayout.Button("执行", GUILayout.Width(50))) { var ret = EditorUtility.DisplayDialog("提示", "是否执行:" + cim.Name, "OK", "Cancel"); if (ret) { //执行 cim.Invoke(null, new object[] { }); } } } GUILayout.EndHorizontal(); } } EditorGUILayout.EndScrollView(); EditorGUILayoutEx.Layout_DrawLineH(Color.white); GUILayout.Space(10); EditorGUILayoutEx.Layout_DrawLineH(Color.white); GUILayout.Label(@"服务器CI流程: 一般Git管理代码,SVN或P4管理美术资产。 Git master分支作为稳定发布版本分支,工作都在子分支,测试通过后会合并到主分支。 SVN资产也会用hook实现同步到Git assets分支,供程序使用. 程序也会将测试通过的资产随着code提交到主分支. CI一般监听Git Master分支,定时一键构建所有资产:AB包、脚本、Sql 1.资源流程: master提交=>生成AB、热更脚本、sql=>AB性能测试=>WebHook通知到内部=>提交到资产SVN 2.母包流程: 更新资产SVN、更新Git master=>构建母包=>自动包体测试=>通知测试结果 3.资源发布: 更新资产SVN=>发布到资源服务器 "); } GUILayout.EndVertical(); }