背景 我們經常會使用自動打包功能
文件名稱:
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);}
}