// Build the client public static string BuildClient(BuildTarget target, string directory, string applicationName, BuildConfiguration config) { if (!System.IO.Directory.Exists(directory + "/" + "")) // If directory doesnt exist { System.IO.Directory.CreateDirectory(directory + "/" + applicationName); // Create it } Debug.Log("Building Player, Directory: " + directory + "/" + applicationName); // Debug "building" return(UnityEditor.BuildPipeline.BuildPlayer(GetBuildSettings(target.platform, directory + "/" + applicationName, config)).ToString()); // Build player and return debug result }
// Get BuildSettings object static BuildPlayerOptions GetBuildSettings(UnityEditor.BuildTarget target, string path, BuildConfiguration config) { BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions(); // Create new BuildPlayerOptions List <string> paths = new List <string>(); // Create new list for paths foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes) // Iterate scenes { paths.Add(scene.path); // Add to path list } string[] scenes = paths.ToArray(); // Convert to array buildPlayerOptions.scenes = scenes; // Set scenes buildPlayerOptions.locationPathName = path; // Set build path buildPlayerOptions.target = target; // Set target buildPlayerOptions.options = config.buildOption; // Set options (development build) return(buildPlayerOptions); // Return BuildPlayerOptions }
// Start Build Pipeline process public static IEnumerator ProcessBuildPipeline(BuildConfiguration config, ProjectSettings projectSettings) { if (config) // If the build configuration is not null { string outputPath = ""; for (int t = 0; t < config.buildTargets.Count; t++) // Iterate build targets { BuildTarget target = config.buildTargets[t]; // Get current target string directory = UnityEngine.Application.dataPath.Replace("/Assets", "/Builds"); // Get directory if (target.nameOverride != null && target.nameOverride.Length > 0) // If use name override from the target { directory = target.nameOverride; // Use } else if (config.nameOverride != null && config.nameOverride.Length > 0) // Else if use name override from the whole config { directory = config.nameOverride; // Use } string applicationName = GetApplicationName(target, projectSettings, config.nameOverride); // Get application name BuildSettings.SetApplicationSettings(target); //Set Script logging settings if (config.enableScriptLogging) { SetScriptLoggingParams(StackTraceLogType.Full); } else { SetScriptLoggingParams(StackTraceLogType.ScriptOnly); } if (SetGraphicsAPI(target) == false) // Check if Graphics API can be set to the specified target { Debug.LogError("Failed to build Player, Directory: " + directory + "/" + applicationName); // Log error continue; // Go to next target } string build = BuildClient(target, directory, applicationName, config); // Build client outputPath = directory; while (UnityEditor.BuildPipeline.isBuildingPlayer == true) // Wait for build to finish { yield return(null); // Wait } if (build == "") // If build succeeded { Debug.Log("Built Player, Directory: " + directory + "/" + applicationName); // Log success } else // If build failed { Debug.LogError("Failed to build Player, Directory: " + directory + "/" + applicationName); // Log failure Debug.LogError(build); // Return build fail log } } outputPath = outputPath.Replace(@"/", @"\"); // explorer doesn't like front slashes System.Diagnostics.Process.Start("explorer.exe", outputPath); } else // Null build configuartion { Debug.LogError("No Build Configuration file assigned. Please assign a Build Configuration file in the Build Pipeline window"); // Log error } }