forked from sin365/AxibugEmuOnline
129 lines
3.9 KiB
C#
129 lines
3.9 KiB
C#
#if UNITY_EDITOR
|
||
using AxibugEmuOnline.Editors;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using UnityEditor;
|
||
using UnityEditor.Build.Reporting;
|
||
using UnityEngine;
|
||
|
||
public static class AxiAutoBuild
|
||
{
|
||
[MenuItem("Axibug移植工具/AutoBuild/Build ALL")]
|
||
public static void Build_Build_ALL()
|
||
{
|
||
Build_Global(BuildTarget.Android);
|
||
Build_Global(BuildTarget.iOS);
|
||
Build_Global(BuildTarget.StandaloneWindows);
|
||
Build_Global(BuildTarget.StandaloneLinux64);
|
||
Build_Global(BuildTarget.WSAPlayer);
|
||
AxibugNSPTools.BuildWithRepackNSP();
|
||
}
|
||
|
||
[MenuItem("Axibug移植工具/AutoBuild/Android")]
|
||
public static void Build_Android()
|
||
{
|
||
Build_Global(BuildTarget.Android);
|
||
}
|
||
|
||
[MenuItem("Axibug移植工具/AutoBuild/IOS")]
|
||
public static void Build_IOS()
|
||
{
|
||
Build_Global(BuildTarget.iOS);
|
||
}
|
||
[MenuItem("Axibug移植工具/AutoBuild/PC")]
|
||
public static void Build_PC()
|
||
{
|
||
Build_Global(BuildTarget.StandaloneWindows);
|
||
}
|
||
[MenuItem("Axibug移植工具/AutoBuild/Linux")]
|
||
public static void Build_Linux64()
|
||
{
|
||
Build_Global(BuildTarget.StandaloneLinux64);
|
||
}
|
||
[MenuItem("Axibug移植工具/AutoBuild/UWP")]
|
||
public static void Build_UWP()
|
||
{
|
||
Build_Global(BuildTarget.WSAPlayer);
|
||
}
|
||
|
||
[MenuItem("Axibug移植工具/AutoBuild/EmbeddedLinux")]
|
||
public static void Build_EmbeddedLinux()
|
||
{
|
||
Build_Global(BuildTarget.EmbeddedLinux);
|
||
}
|
||
|
||
[MenuItem("Axibug移植工具/AutoBuild/Switch(打包NSP并重新构建NSP)")]
|
||
public static void Build_Switch()
|
||
{
|
||
AxibugNSPTools.BuildWithRepackNSP();
|
||
}
|
||
|
||
|
||
public static void Build_Global(BuildTarget target)
|
||
{
|
||
if (!EditorUtility.DisplayDialog("打包", $"确认打包{target}?", "继续", "取消"))
|
||
return;
|
||
|
||
var levels = new List<string>();
|
||
foreach (var scene in EditorBuildSettings.scenes)
|
||
{
|
||
if (scene.enabled)
|
||
levels.Add(scene.path);
|
||
}
|
||
|
||
var buildOpt = EditorUserBuildSettings.development ? BuildOptions.Development : BuildOptions.None;
|
||
if (EditorUserBuildSettings.buildWithDeepProfilingSupport)
|
||
buildOpt |= BuildOptions.EnableDeepProfilingSupport;
|
||
if (EditorUserBuildSettings.allowDebugging)
|
||
buildOpt |= BuildOptions.AllowDebugging;
|
||
|
||
string targetName = $"{Application.productName}_{DateTime.Now.ToString("yyyyMMddHHmmss")}";
|
||
|
||
targetName += target switch
|
||
{
|
||
BuildTarget.Android => ".apk",
|
||
BuildTarget.iOS => ".ipa",
|
||
BuildTarget.StandaloneWindows => ".exe",
|
||
_ => "",
|
||
};
|
||
|
||
string targetplatformDir = target.ToString();
|
||
|
||
|
||
targetplatformDir += target switch
|
||
{
|
||
//平台目录追加一层时间
|
||
BuildTarget.iOS => "/" + DateTime.Now.ToString("yyyyMMddHHmmss"),
|
||
BuildTarget.StandaloneLinux64 => "/" + DateTime.Now.ToString("yyyyMMddHHmmss"),
|
||
BuildTarget.StandaloneWindows => "/"+ DateTime.Now.ToString("yyyyMMddHHmmss"),
|
||
_ => "",
|
||
};
|
||
|
||
string _locationPathName = $"Output/{targetplatformDir}/{targetName}";
|
||
string FullPath = Path.GetFullPath(Path.Combine(Application.dataPath, "..", _locationPathName));
|
||
string dirPath = Path.GetDirectoryName(FullPath);
|
||
if (!Directory.Exists(dirPath))
|
||
Directory.CreateDirectory(dirPath);
|
||
|
||
var options = new BuildPlayerOptions
|
||
{
|
||
scenes = levels.ToArray(),
|
||
locationPathName = _locationPathName,
|
||
target = target,
|
||
options = buildOpt
|
||
};
|
||
|
||
try
|
||
{
|
||
BuildReport report = BuildPipeline.BuildPlayer(options);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Debug.LogError($"[AutoBuild] Unity Build {target} 错误:{ex.ToString()}");
|
||
return;
|
||
}
|
||
}
|
||
|
||
}
|
||
#endif |