miduo_client/Assets/Editor/AutoPack.cs

195 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using UnityEngine;
using UnityEditor;
using System.IO;
using System;
using GameEditor.FrameTool;
public class AutoPack : EditorWindow
{
static bool isObb = false;
bool isBuild = false;
static bool isZs = false;
static string[] versionArr = new string[15];
static int verIndex = 0;
static string curProjectDir;
static string m_ExcelPath;
static string[] excelArr;
static int excelIndex=0;
//打包数据
[MenuItem("自动化打包/一键导出")]
private static void EzBuildPack()
{
curProjectDir = Environment.CurrentDirectory.Replace('\\', '/');
verIndex = EditorPrefs.GetInt("verIndex");
m_ExcelPath = EditorPrefs.GetString("m_ExcelPath");
excelArr = Directory.GetDirectories(m_ExcelPath, "master_*");
Debug.Log(EditorPrefs.GetString("m_Bench"));
if (excelArr!=null)
{
for (int i = 0; i < excelArr.Length; i++)
{
if (excelArr[i]== EditorPrefs.GetString("m_Bench"))
{
excelIndex = i;
}
}
}
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<AutoPack>(wr, true);
buildWin.titleContent = new GUIContent("打包工具");
buildWin.Show();
}
private void OnGUI()
{
EditorGUILayout.BeginVertical();
EditorGUILayout.Space();
EditorGUILayout.Space();
if (excelArr!=null&& excelArr.Length>0)
{
excelIndex = EditorGUILayout.Popup("选择excel文件", excelIndex, excelArr);
EditorGUILayout.Space();
if (GUILayout.Button("一键导表", GUILayout.Height(40f)))
{
EditorPrefs.SetString("m_Bench", excelArr[excelIndex]);
GameEditor.Core.DataConfig.DataConfigWindow.excelALLConfig(false, excelArr[excelIndex] + "/base_data");
}
}
if (GUILayout.Button("单打lua资源", GUILayout.Height(40f)))
{
if (FrameTool.BuildLuaAssetBundles())
{
string exportPath = GameEditor.AssetBundle.AssetBundleConfig.GetExportPath(EditorUserBuildSettings.activeBuildTarget);
string targetPath = FrameTool.GetStreamingAssetPath(EditorUserBuildSettings.activeBuildTarget);
File.Copy(exportPath + "/lzma/luabytes.unity3d", targetPath + "/lzma/luabytes.unity3d", true);
File.Copy(exportPath + "/lzma/resconfigs.unity3d", targetPath + "/lzma/resconfigs.unity3d", true);
File.Copy(exportPath + "/files.unity3d", targetPath + "/files.unity3d", true);
}
}
EditorGUILayout.Space();
EditorGUILayout.Space();
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("开始导出工程");
EditorPrefs.SetInt("verIndex", verIndex);
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资源");
//打包游戏
FrameTool.BuildGameAssetBundles();
//拷贝AssetBundle到流媒体目录
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)&& Directory.Exists(outPath))
{
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");
}
}
}