using UnityEngine; using UnityEditor; using System.IO; using System; public class AutoPack : EditorWindow { static bool isObb = false; bool isBuild = false; static bool isZs = false; static string[] versionArr = new string[15]; int verIndex = 0; static string curProjectDir; //打包数据 [MenuItem("自动化打包/一键导出")] private static void EzBuildPack() { curProjectDir = Environment.CurrentDirectory.Replace('\\', '/'); string[] _strArr = Directory.GetFiles(curProjectDir + "/AssetBundles/", "*.txt"); Debug.Log("version列表数量:"+_strArr.Length); for (int i = 0; i < _strArr.Length; i++) { string[] pathSpl = _strArr[i].Split('/'); string _str = pathSpl[pathSpl.Length-1]; versionArr[i] = _str; } //创建窗口 Rect wr = new Rect(0, 0, 400, 500); var buildWin = GetWindowWithRect(wr, true); buildWin.titleContent = new GUIContent("打包工具"); buildWin.Show(); } private void OnGUI() { EditorGUILayout.BeginVertical(); EditorGUILayout.Space(); EditorGUILayout.Space(); verIndex = EditorGUILayout.Popup("选择version配置文件:", verIndex, versionArr); EditorGUILayout.Space(); #if UNITY_ANDROID isObb = EditorGUILayout.ToggleLeft("是否导出obb包", isObb); #endif isBuild = EditorGUILayout.ToggleLeft("是否需要build资源", isBuild); isZs = EditorGUILayout.ToggleLeft("是否从正式场景导出", isZs); EditorGUILayout.Space(); if (GUILayout.Button("导出工程", GUILayout.Height(40f))) { Debug.Log("开始导出工程"); string targetPath = Application.dataPath + "/Resources/version.txt"; string copyPath = curProjectDir + "/AssetBundles/" + versionArr[verIndex]; Debug.Log("version文件路径:" + copyPath); if (File.Exists(targetPath)) { File.Delete(targetPath); } File.Copy(copyPath, targetPath, true); AssetDatabase.Refresh(); if (isBuild) { Debug.Log("开始build资源"); //打包游戏 GameEditor.FrameTool.FrameTool.BuildGameAssetBundles(); //拷贝AssetBundle到流媒体目录 GameEditor.FrameTool.FrameTool.CopyAssetBundleToStreamingAssets(); //刷新资源配置 GameEditor.ResourcesPathEditor.CreateResourcePathConfig(); Debug.Log("完成build资源"); } #if UNITY_ANDROID string sceneName = "Assets/LuaFramework/Scenes/LogoHwTest.unity"; if (isZs) { sceneName = "Assets/LuaFramework/Scenes/LogoHwRelease.unity"; } ExportAS( sceneName); #elif UNITY_IOS string sceneName = "Assets/LuaFramework/Scenes/Logo.unity"; ExportXcode(sceneName); #endif } } public static void ExportAS( string _sceneName) { PlayerSettings.productName = "ex_android_jl"; PlayerSettings.Android.useAPKExpansionFiles = isObb; string outPath = "D:/exAndroid/unity_ex_as"; if (isObb) { outPath = "D:/exAndroid/unity_ex_obb"; } if (Directory.Exists(outPath + "/ex_android_jl")) { Directory.Delete(outPath + "/ex_android_jl/", true); } EditorUserBuildSettings.exportAsGoogleAndroidProject = true; EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle; // 设置需要打包的场景 string launchScene = _sceneName; Debug.Log("打包场景:" + launchScene); BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions(); buildPlayerOptions.locationPathName = outPath; buildPlayerOptions.options = BuildOptions.None; buildPlayerOptions.options |= BuildOptions.AcceptExternalModificationsToPlayer; buildPlayerOptions.scenes = new[] { launchScene }; buildPlayerOptions.target = BuildTarget.Android; // 调用开始打包 BuildPipeline.BuildPlayer(buildPlayerOptions); Debug.Log("android工程导出路径"+ outPath + "/ex_android_jl"); Debug.Log("导出完成"); ///打开python工具所在路径 GameEditor.Core.DataConfig.ConfigExportWindow.OpenDirectory("C:/Users/aaa/Desktop/pythonPack"); } private static void ExportXcode(string _sceneName) { PlayerSettings.productName = "太初行"; string mainXcodePath = isZs? "/Volumes/ELEMENTS/JieLing/Packager/IOS/MHT_HW_RELEASE": "/Volumes/ELEMENTS/JieLing/Packager/IOS/MHT_HW_TEST"; string outPath = isZs?"/Volumes/ELEMENTS/JieLing/Packager/IOS/exXcodePro_Release":"/Volumes/ELEMENTS/JieLing/Packager/IOS/exXcodePro_Test"; if (Directory.Exists(outPath)) { Directory.Delete(outPath, true); } // 设置需要打包的场景 string launchScene = _sceneName; Debug.Log("打包场景:" + launchScene); BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions(); buildPlayerOptions.locationPathName = outPath; buildPlayerOptions.options = BuildOptions.None; buildPlayerOptions.options |= BuildOptions.AcceptExternalModificationsToPlayer; buildPlayerOptions.scenes = new[] { launchScene }; buildPlayerOptions.target = BuildTarget.iOS; // 调用开始打包 BuildPipeline.BuildPlayer(buildPlayerOptions); Debug.Log("打包完成"); Debug.Log("导出工程路径:"+ outPath); if (Directory.Exists(mainXcodePath)) { Debug.Log("替换xcode资源"); Directory.Delete(mainXcodePath+"/Data", true); Directory.Move(outPath+"/Data",mainXcodePath+"/Data"); Directory.Delete(mainXcodePath+"/Classes/Native", true); Directory.Move(outPath+"/Classes/Native",mainXcodePath+"/Classes/Native"); } } }