###### tags: `CustomBuildPipline` `Unity` # Custom Build Pipline 使用batch, Build project / addressable assets ## Batch file 1. 需將 Batch file ```editorPath``` 修改為本地 Unity Editor 的路徑 2. Batch file 路徑為專案根目錄  3. Batch file 會產生 stdout 紀錄 Build log * Build project 呼叫 Unity 專案中的ExpoStudio.BuildProject ``` set mypath=%~dp0 set editorPath="C:\Program Files\Unity\Hub\Editor\2020.3.32f1\Editor\Unity.exe" @rem Build project %editorPath% -quit -batchmode -logFile stdout.log -projectPath %mypath% -executeMethod ExpoStudio.BuildProject ``` * Build bundle 呼叫 Unity 專案中的ExpoStudio.BuildContentAndPlayer ``` set mypath=%~dp0 set editorPath="C:\Program Files\Unity\Hub\Editor\2020.3.32f1\Editor\Unity.exe" @rem Build AA %editorPath% -quit -batchmode -logFile stdout.log -projectPath %mypath% -executeMethod BatchBuild.BuildContentAndPlayer ``` ## Unity Sample * Build Peoject ``` #if UNITY_EDITOR using System; using System.IO; using System.Linq; using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.AddressableAssets; using Unity.EditorCoroutines.Editor; public class ExpoStudio : EditorWindow { public static string ExportPath = "C:\\Users\\john.tc.tsai\\Desktop\\output\\webgl\\"; [MenuItem("Studio/Build Project")] public static void BuildProject() { Debug.Log("[Build Project]"); // Get filename. //string outpath = EditorUtility.SaveFolderPanel("WebGL", "C:\\Users\\COMPALDEV\\Desktop\\output\\", "webgl"); string[] levels = new string[] { "Assets/Scenes/Studio.unity" }; // Build player. BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions(); buildPlayerOptions.scenes = levels; buildPlayerOptions.target = BuildTarget.WebGL; buildPlayerOptions.locationPathName = ExportPath; buildPlayerOptions.options = BuildOptions.None; BuildPipeline.BuildPlayer(buildPlayerOptions); Debug.Log($"<color=green>[Build success!]</color>"); // Copy a file from the project folder to the build folder, alongside the built game. FileUtil.CopyFileOrDirectory("Assets/Build/htaccess", ExportPath + "Build\\.htaccess"); } } #endif ``` * Build Addressable assets ``` #if UNITY_EDITOR using System; using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Build; using UnityEditor.AddressableAssets.Settings; using UnityEditor.Build.Reporting; using UnityEngine; public class BatchBuild { public static string build_script = "Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset"; public static string profile_name = "000webhost_aa"; public static void ChangeSettings() { string defines = ""; string[] args = Environment.GetCommandLineArgs(); foreach (var arg in args) if (arg.StartsWith("-defines=", System.StringComparison.CurrentCulture)) defines = arg.Substring(("-defines=".Length)); var buildSettings = EditorUserBuildSettings.selectedBuildTargetGroup; PlayerSettings.SetScriptingDefineSymbolsForGroup(buildSettings, defines); } public static void BuildContentAndPlayer() { AddressableAssetSettings settings = AddressableAssetSettingsDefaultObject.Settings; settings.activeProfileId = settings.profileSettings.GetProfileId(profile_name); IDataBuilder builder = AssetDatabase.LoadAssetAtPath<ScriptableObject>(build_script) as IDataBuilder; settings.ActivePlayerDataBuilderIndex = settings.DataBuilders.IndexOf((ScriptableObject)builder); AddressableAssetSettings.BuildPlayerContent(out AddressablesPlayerBuildResult result); if (!string.IsNullOrEmpty(result.Error)) throw new Exception(result.Error); //BuildReport buildReport // = BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, // "d:/build/winApp.exe", EditorUserBuildSettings.activeBuildTarget, // BuildOptions.None); //if (buildReport.summary.result != BuildResult.Succeeded) // throw new Exception(buildReport.summary.ToString()); } } #endif ``` ## Issue * 若發現使用 CMD Build Project, Light 無法正常運作時, 請在 Lighting Settings 指定自訂的 Light Setting  https://forum.unity.com/threads/resolved-standalone-builds-from-command-line-have-incorrect-lighting.1097056/
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.