static IEnumerator Execute(bool showDialog) { if (showDialog) { //启用对话框,代码会停顿在此,等点击了才往下执行 if (!EditorUtility.DisplayDialog("一键打包工具", "确定要执行吗?", "确定", "取消")) { yield break; } } int count = 0; if (BuildSetting.instance.isExportToMainProject && (string.IsNullOrEmpty(BuildSetting.instance.streamingFolder)))// || !arg.StreamingFolder.EndsWith("StreamingAssets"))) { if (showDialog) { EditorUtility.DisplayDialog("错误", "导出目标项目StreamingAssets目录设置不正确...", "确定"); } yield break; } // 计时 System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); #region 流程 // 打包 if (BuildSetting.instance.isBuild) { count++; if (BuildSetting.instance.isForceRebuildAll && Directory.Exists(BuildConfig.buildingRootFolder)) { Directory.Delete(BuildConfig.buildingRootFolder, true); } IEnumerator buildEtor = Builder.Build(); while (buildEtor.MoveNext()) { yield return(buildEtor.Current); } } // 导出到 streaming asset if (BuildSetting.instance.isExportToMainProject) { count++; Uploader.UploadToStreamingAssetsFolder(BuildSetting.instance.streamingFolder); yield return("导出到主项目的 StreamingAssets 目录完毕。"); AssetDatabase.Refresh(); yield return("刷新项目资源..."); } // 导出到 ftp 服务器 if (BuildSetting.instance.isUploadToFtp) { count++; string ftpRelativePath = "AssetBundle/" + BuildConfig.platformFolderName; string srcFolder = BuildSetting.instance.isFtpUploadAll ? BuildConfig.buildingAssetBundlesFolder : BuildConfig.tempbuildingAssetBundlesFolder; Uploader.UploadToFtp(BuildSetting.instance.ftpUri, srcFolder, ftpRelativePath, BuildSetting.instance.ftpUserName, BuildSetting.instance.ftpPassword, BuildSetting.instance.isFtpPassive); yield return("已使用控制台程序上传ftp..."); } #endregion BuildSetting.instance.Save(); stopwatch.Stop(); int totalSeconds = (int)(stopwatch.ElapsedMilliseconds / 1000f); int minutes = Mathf.FloorToInt(totalSeconds / 60f); int seconds = totalSeconds % 60; string dialog = count > 0 ? string.Format("执行结束!耗时: {0} 分 {1} 秒。", minutes, seconds) : "什么也没发生..."; yield return(dialog); // 弹出结果框 if (showDialog) { EditorUtility.DisplayDialog("完成", dialog, "确定"); } }