背景 我们经常会使用自动打包功能
文件名称:
bash
AutoBuild.cs
csharp
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
public class AutoBuilder
{
[MenuItem("Build/GetCurrentBuildTarget")]
public static void GetCurrentBuildTarget()
{
Debug.Log($"当前平台为:{EditorUserBuildSettings.activeBuildTarget}");
Debug.Log(
$"当前平台组为:{BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget)}"
);
}
[MenuItem("Build/Build")]
public static void Build()
{
BuildTarget currentTarget = EditorUserBuildSettings.activeBuildTarget;
BuildTargetGroup currentGroup = BuildPipeline.GetBuildTargetGroup(currentTarget);
BuildTarget buildTarget = BuildTarget.StandaloneWindows64;
BuildTargetGroup buildTargetGroup = BuildTargetGroup.Standalone;
Debug.Log($"当前平台: {currentTarget}");
if (currentTarget != buildTarget)
{
Debug.Log($"检测到非 {buildTarget} 平台,正在切换...");
bool success = EditorUserBuildSettings.SwitchActiveBuildTarget(
buildTargetGroup,
buildTarget
);
if (success)
{
Debug.Log($"切换至 {buildTarget} 平台成功");
// 可选:保存工程设置(非必须)
AssetDatabase.SaveAssets();
}
else
{
Debug.LogError($"切换失败!请检查 {buildTarget} 模块是否已安装");
}
}
else
{
Debug.Log($"当前已是 {buildTarget} 平台,无需切换");
}
// 获取场景设置中的所有场景
string[] scenes = EditorBuildSettings
.scenes.Where(scene => scene.enabled) // 过滤出被启用的场景
.Select(scene => scene.path) // 获取场景路径
.ToArray();
string projectPath = Directory.GetParent(Application.dataPath).FullName;
Debug.Log("Project Path: " + projectPath);
string outputpath =
buildTargetGroup == BuildTargetGroup.Standalone
? Path.Combine(
projectPath,
buildTargetGroup.ToString(),
EditorUserBuildSettings.activeBuildTarget.ToString()
)
: Path.Combine(projectPath, EditorUserBuildSettings.activeBuildTarget.ToString());
Debug.Log("Output Path: " + outputpath);
// 执行构建
BuildPipeline.BuildPlayer(scenes, outputpath, buildTarget, BuildOptions.None);
}
}