[Unity]设置自动打包脚本
背景 我们经常会使用自动打包功能
文件名称:
AutoBuild.cs
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);}
}