版本:Unity 6 (6000.0)
语言英语
  • C#

BuildReport

UnityEditor.Build.Reporting 中的类

/

继承自:Object

建议更改

成功!

感谢您帮助我们改进 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实会阅读用户提出的每个建议的更改,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>重试</a>几分钟后。感谢您抽出时间帮助我们改进 Unity 文档的质量。

关闭

取消

描述

BuildReport API 提供了有关 Unity 构建过程的信息。

BuildReport 对象由 BuildPipeline.BuildPlayer 返回,可用于发现有关输出文件、构建步骤以及其他平台特定信息(如本机代码剥离)的信息。

对于 AssetBundle 构建,BuildReport 可通过在调用 BuildPipeline.BuildAssetBundles 后立即调用 GetLatestReport 来获取。

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" } } };

BuildPipeline.BuildAssetBundles( buildOutputDirectory, bundleDefinitions, BuildAssetBundleOptions.ForceRebuildAssetBundle, EditorUserBuildSettings.activeBuildTarget);

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 int callbackOrder { get { return 0; } } public void OnProcessScene(UnityEngine.SceneManagement.Scene scene, BuildReport report) { Debug.Log("MyTroublesomeBuildCallback called for " + scene.name); Debug.LogError("Logging an error");

throw new BuildFailedException("Forcing the build to stop"); } }

属性

packedAssets构建过程生成的 PackedAssets 数组。
scenesUsingAssets如果在构建过程中使用了 BuildOptions.DetailedBuildReport,则构建过程生成的 ScenesUsingAssets 的可选数组。
steps在构建过程中执行的所有 BuildSteps 的数组。
strippingInfo构建的 StrippingInfo 对象。
summary包含有关构建过程的整体统计数据和数据的 BuildSummary。

公共方法

GetFiles返回构建过程输出的所有文件的数组。
SummarizeErrors返回一个字符串,总结构建过程中发生的任何错误

静态方法

GetLatestReport返回由最近的 Player 或 AssetBundle 构建生成的构建报告

继承的成员

属性

hideFlags对象是否应隐藏、与场景一起保存或可供用户修改?
name对象的名称。

公共方法

GetInstanceID获取对象的实例 ID。
ToString返回对象的名称。

静态方法

Destroy删除 GameObject、组件或资产。
DestroyImmediate立即销毁对象 obj。强烈建议使用 Destroy 代替。
DontDestroyOnLoad加载新场景时不要销毁目标对象。
FindAnyObjectByType检索类型为 type 的任何活动的已加载对象。
FindFirstObjectByType检索类型为 type 的第一个活动的已加载对象。
FindObjectsByType检索类型为 type 的所有已加载对象的列表。
Instantiate克隆原始对象并返回克隆。
InstantiateAsync捕获原始对象(必须与某些 GameObject 相关)的快照并返回 AsyncInstantiateOperation。

运算符

bool对象是否存在?
operator !=比较两个对象是否引用不同的对象。
operator ==比较两个对象引用以查看它们是否引用同一个对象。