miduo_client/Assets/Scripts/Editor/GameEditor/FrameTool/BuildWindow.cs

234 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 System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Linq;
using GameEditor.Core;
using GameEditor.GameEditor.PlayerBuilder;
using GameLogic;
using System.Diagnostics;
using ResUpdate;
namespace GameEditor.FrameTool {
public class BuildWindow : EditorWindow
{
/// <summary>
/// 版本文件名
/// </summary>
const string VersionsFile = "version";
Version version;
string defaultVersion;
string subChannel;
string serverUrl;
string resUrl;
/// <summary>
/// 导出APK/XCODE工程
/// </summary>
bool isBuildPlayer;
/// <summary>
/// 是否拷贝AB包到StreamingAssets
/// </summary>
bool isCopyABSToStreamingAssets;
// Add menu named "My Window" to the Window menu
[MenuItem("Build/BuildWindow")]
static void Init()
{
// Get existing open window or if none, make a new one:
BuildWindow window = (BuildWindow)EditorWindow.GetWindow(typeof(BuildWindow));
window.Show();
window.InitWindow();
}
void InitWindow()
{
InitSize();
InitGames();
}
/// <summary>
/// 初始化大小
/// </summary>
void InitSize()
{
minSize = new Vector2(300, 400);
maxSize = new Vector2(300, 650);
}
/// <summary>
/// 初始化游戏
/// </summary>
void InitGames()
{
version = new Version(Resources.Load<TextAsset>(VersionsFile).text);
defaultVersion = version.GetInfo("version");
subChannel = version.GetInfo("subChannel");
serverUrl = version.GetInfo("serverUrl");
resUrl = version.GetInfo("resUrl");
}
void OnGUI()
{
EditorGUILayout.BeginVertical();
EditorGUILayout.Space();
EditorGUILayout.LabelField(string.Format("当前平台:{0}", EditorUserBuildSettings.activeBuildTarget.ToString()));
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
isCopyABSToStreamingAssets = EditorGUILayout.BeginToggleGroup("拷贝AssetBundle到流媒体目录打包到App包体内", isCopyABSToStreamingAssets);
if (isCopyABSToStreamingAssets)
{
EditorGUILayout.BeginVertical();
defaultVersion = EditorGUILayout.TextField("Version", defaultVersion);
subChannel = EditorGUILayout.TextField("SubChannel", subChannel);
serverUrl = EditorGUILayout.TextField("ServerUrl", serverUrl);
resUrl = EditorGUILayout.TextField("ResUrl", resUrl);
EditorGUILayout.EndVertical();
}
EditorGUILayout.EndToggleGroup();
EditorGUILayout.Space();
isBuildPlayer = EditorGUILayout.BeginToggleGroup(GetBuildTitle(), isBuildPlayer);
if (isBuildPlayer)
{
var gameSet = GameObject.FindObjectOfType<GameSettings>();
gameSet.settingInfo.isUpdate = true;
gameSet.settingInfo.bundleMode = true;
gameSet.settingInfo.isDebug = false;
gameSet.settingInfo.luaBundleMode = true;
}
EditorGUILayout.EndToggleGroup();
EditorGUILayout.Space();
if (GUILayout.Button("整体打包", GUILayout.Height(40f)))
{
if (EditorUtility.DisplayDialog("打包提示", "打包将持续一段时间,确定打包?", "是", "否")) //显示对话框
{
BuildGame();
}
}
if (GUILayout.Button("单打lua资源", GUILayout.Height(40f)))
{
if (EditorUtility.DisplayDialog("打包提示", "单打lua资源将持续一段时间确定打包", "是", "否")) //显示对话框
{
if (FrameTool.BuildLuaAssetBundles())
{
//拷贝AssetBundle到流媒体目录
if (isCopyABSToStreamingAssets)
{
string exportPath = 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);
SaveVersionFile();
}
Close();
}
}
}
if (GUILayout.Button("资源合法性检查", GUILayout.Height(40f)))
{
FrameTool.CheckAssetBundleStates();
}
if (GUILayout.Button("查看多依赖资源", GUILayout.Height(40f)))
{
FrameTool.AssetsDuplicatedInMultBundlesCache(1);
}
if (GUILayout.Button("处理多依赖资源", GUILayout.Height(40f)))
{
FrameTool.AssetsDuplicatedInMultBundlesCache(2);
}
}
/// <summary>
/// 打包游戏
/// </summary>
void BuildGame()
{
//打包游戏
FrameTool.BuildGameAssetBundles();
//拷贝AssetBundle到流媒体目录
if (isCopyABSToStreamingAssets)
{
FrameTool.CopyAssetBundleToStreamingAssets();
SaveVersionFile();
}
//是否BuildPlayer
if (isBuildPlayer)
{
switch (EditorUserBuildSettings.activeBuildTarget)
{
case BuildTarget.Android:
ExportApk();
break;
case BuildTarget.iOS:
ExportXcode();
break;
}
}
Close();
}
void SaveVersionFile()
{
var VersionsFilePath = Application.dataPath + "/Resources/" + VersionsFile + ".txt";
var VersionsFilePath2 = AppConst.PersistentDataPath + VersionsFile + ".txt";
version.SetInfo("version", defaultVersion);
version.SetInfo("subChannel", subChannel);
version.SetInfo("serverUrl", serverUrl);
version.SetInfo("resUrl", resUrl);
string directoryPath = Path.GetDirectoryName(VersionsFilePath);
if (!Directory.Exists(directoryPath))
Directory.CreateDirectory(directoryPath);
File.WriteAllText(VersionsFilePath, version.ToJson(), System.Text.Encoding.UTF8);
string directoryPath2 = Path.GetDirectoryName(VersionsFilePath2);
if (!Directory.Exists(directoryPath2))
Directory.CreateDirectory(directoryPath2);
File.WriteAllText(VersionsFilePath2, version.ToJson(), System.Text.Encoding.UTF8);
}
/// <summary>
/// 获取是否打包
/// </summary>
/// <returns></returns>
string GetBuildTitle()
{
switch (EditorUserBuildSettings.activeBuildTarget)
{
case BuildTarget.Android:
return "导出APK";
case BuildTarget.iOS:
return "导出XCODE工程";
}
return "请切换到Android/IOS平台";
}
/// <summary>
/// 导出XCODE工程
/// </summary>
void ExportXcode()
{
PlayerBuilder.BuildXCode();
}
/// <summary>
/// 是否导出APK
/// </summary>
void ExportApk()
{
PlayerBuilder.BuildApk();
}
}
}