BuildReport
The BuildReport API gives you information about the Unity build process.
Read time 6 minutesLast updated 10 days ago
Definition
- Type: Class
- Namespace: UnityEditor.Build.Reporting
- Assembly: UnityEditor.CoreModule
- Inherits from: Object
public sealed class BuildReport : Object
Remarks
A BuildReport object is returned by BuildPipeline.BuildPlayer and can be used to discover information about the files output, the build steps taken, and other platform-specific information such as native code stripping.
For AssetBundle builds the BuildReport is available by calling BuildReport.GetLatestReport immediately after calling BuildPipeline.BuildAssetBundles.
For builds tracked in the BuildHistory, use BuildHistory.LoadBuildReport to load a BuildReport from the build history.
Additional Resources: BuildHistory, BuildReportSummary
Examples
using System.IO;using System.Linq;using System.Text;using UnityEditor;using UnityEditor.Build;using UnityEditor.Build.Reporting;using UnityEngine;public class BuildReportExample{ [MenuItem("Example/Build AssetBundle")] static public void BuildBundles() { string buildOutputDirectory = "BuildOutput"; if (!Directory.Exists(buildOutputDirectory)) Directory.CreateDirectory(buildOutputDirectory); var bundleDefinitions = new AssetBundleBuild[] { new AssetBundleBuild() { assetBundleName = "MyBundle", assetNames = new string[] { "Assets/Scenes/SampleScene.unity" } } }; MyTroublesomeBuildCallback.forceFailedBuild = true; BuildPipeline.BuildAssetBundles( buildOutputDirectory, bundleDefinitions, BuildAssetBundleOptions.ForceRebuildAssetBundle, EditorUserBuildSettings.activeBuildTarget); MyTroublesomeBuildCallback.forceFailedBuild = false; BuildReport report = BuildReport.GetLatestReport(); if (report != null) { var sb = new StringBuilder(); sb.AppendLine("Build result : " + report.summary.result); sb.AppendLine("Build size : " + report.summary.totalSize + " bytes"); sb.AppendLine("Build time : " + report.summary.totalTime); sb.AppendLine("Error summary : " + report.SummarizeErrors()); sb.Append(LogBuildReportSteps(report)); sb.AppendLine(LogBuildMessages(report)); Debug.Log(sb.ToString()); } else { // Certain errors like invalid input can fail the build immediately, with no BuildReport written Debug.Log("AssetBundle build failed"); } } public static string LogBuildReportSteps(BuildReport buildReport) { var sb = new StringBuilder(); sb.AppendLine($"Build steps: {buildReport.steps.Length}"); int maxWidth = buildReport.steps.Max(s => s.name.Length + s.depth) + 3; foreach (var step in buildReport.steps) { string rawStepOutput = new string('-', step.depth + 1) + ' ' + step.name; sb.AppendLine($"{rawStepOutput.PadRight(maxWidth)}: {step.duration:g}"); } return sb.ToString(); } public static string LogBuildMessages(BuildReport buildReport) { var sb = new StringBuilder(); foreach (var step in buildReport.steps) { foreach (var message in step.messages) // If desired, this logic could ignore any Info or Warning messages to focus on more serious messages sb.AppendLine($"[{message.type}] {message.content}"); } string messages = sb.ToString(); if (messages.Length > 0) return "Messages logged during Build:\n" + messages; else return ""; }} // For the purpose of demonstration, this callback logs different types of errors and forces a build failure[BuildCallbackVersion(1)]class MyTroublesomeBuildCallback : IProcessSceneWithReport{ public static bool forceFailedBuild = false; public int callbackOrder { get { return 0; } } public void OnProcessScene(UnityEngine.SceneManagement.Scene scene, BuildReport report) { if (!forceFailedBuild) return; Debug.Log("MyTroublesomeBuildCallback called for " + scene.name); Debug.LogError("Logging an error"); throw new BuildFailedException("Forcing the build to stop"); }}
Properties
Property | Description |
|---|---|
| contentSummary | Retrieve statistics about the content of the build, such as total sizes, object counts, and breakdowns by Unity object type and source asset. |
| packedAssets | An array of all the PackedAssets generated by the build process. |
| scenesUsingAssets | An optional array of ScenesUsingAssets generated by the build process if BuildOptions.DetailedBuildReport was used during the build. |
| steps | An array of all the BuildSteps that took place during the build process. |
| strippingInfo | The StrippingInfo object for the build. |
| summary | A BuildSummary containing overall statistics and data about the build process. |
Methods
Method | Description |
|---|---|
| GetFiles | Returns an array of all the files output by the build process. |
| GetRootAssetPaths | Retrieve the array of paths of root assets that were built in a ContentDirectory build. |
| SummarizeErrors | Returns a string summarizing any errors that occurred during the build |
Static Methods
Method | Description |
|---|---|
| GetLatestReport | Obtains the build report generated by the most recent Player, Content Directory, or AssetBundle build. |
| LoadReport | Loads a BuildReport from the specified file path. |
Inheritance
Operators
Operator | Description |
|---|---|
| operator == | Compares two object references to see if they refer to the same object. |
| bool | Determines whether the object exists. |
| operator != | Compares if two objects refer to a different object. |