[Unity]设置自动打包脚本

背景 我们经常会使用自动打包功能

文件名称:

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);
    }
}
相关推荐
WiChP1 天前
【V0.1B15】从零开始的2D游戏引擎开发之路
游戏引擎
zhchyun20082 天前
# 【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(06)
ui·unity·游戏引擎
Behaviour3 天前
Unity游戏HybridCLR 热更新接入实战
游戏·unity·游戏引擎
LONGZETECH3 天前
新能源汽车动力电池实训教学痛点与虚拟仿真技术解决方案
c语言·3d·unity·架构·汽车·汽车教学软件
王维志3 天前
UiSplineRenderer
unity·游戏引擎
k4m7v2pz3 天前
Godot 4 仿 agar.io:相机缩放被 max_zoom 卡死,窗口越大球越小的根因与修复
游戏引擎·godot·相机·缩放·clamp·camera2d
FairGuard手游加固3 天前
iOS 游戏加固技术解析:代码混淆、资源加密、内存保护与重签名检测
安全·游戏·macos·unity·ios·objective-c
k4m7v2pz4 天前
Godot 4 窗口拉伸黑边与变形:stretch 配置全解析
数码相机·游戏引擎·godot·2d游戏·黑边·stretch·画面比例
UWA4 天前
GPM 2.0 WebGL 监测能力扩容|覆盖 Unity/Cocos/LayaAir 多引擎微信 & 抖音小游戏
unity·微信·性能优化·小游戏·webgl
Behaviour4 天前
Unity 手游网络同步技术
网络·unity·c#·游戏引擎