Продление срока действия BuildReport класс, отслеживающий вклад ассетов в размер сборки.
В процессе сборки создаётся объект PackedAssets для каждого сериализованного файла, а также каждого файла resS и resource, сформированного сборкой. Сериализованные файлы содержат сериализованные объекты Unity из сцен и ассетов.
Сведения PackedAsset позволяют анализировать вклад отдельных ассетов или их типов в размер сборки, например вычислять суммарный размер всех текстур.
Примеры имён сериализованных файлов в выходных данных сборки Player: resources.assets, sharedassets0.assets и globalgamemanagers.assets. Примечание: содержимое сцен в выходных данных сборки Player записывается в сериализованные файлы с именами level0, level1, level2 и т. д. Однако объекты PackedAsset не создаются ни для файлов level, ни для файла globalgamemanager.
AssetBundle с ассетами содержит один сериализованный файл с именем наподобие «CAB-b8befc517982290c55526f35cbb7f03d». AssetBundle со сценами содержит несколько сериализованных файлов.
Объект PackedAssets для сериализованного файла записывает размер заголовка в свойство overhead, а сведения о каждом объекте — в свойство contents.
Файлы с расширением .resource содержат аудио- или видеоданные, на которые ссылается объект AudioClip либо VideoClip в связанном сериализованном файле. Например, level1.resource содержит аудио- и видеоданные объектов из сериализованного файла level1. Объект PackedAsset для файла .resource хранит сведения об исходном ассете для каждого блока аудио- или видеоданных в этом файле.
Аналогично объект PackedAsset для файла .resS хранит сведения о размере и происхождении данных Texture и Mesh в этом файле.
Примечание: в больших сборках объекты PackedAsset могут иметь очень большой размер и потреблять значительный объём памяти. При работе с этими данными рекомендуется пройти их один раз, чтобы заполнить меньшие структуры данных либо экспортировать сведения в другой формат, требуемый внешними инструментами.
Дополнительные ресурсы: PackedAssetInfo
using UnityEngine;
using UnityEditor;
using UnityEditor.Build.Reporting;
using System.Text;
public class BuildReportPackedAssetsExample
{
[MenuItem("Example/Show PackedAssets from Latest Build")]
static void ShowPackedAssets()
{
var buildReport = BuildReport.GetLatestReport();
if (buildReport == null)
{
Debug.Log("Please run a Player or AssetBundle build, then try again");
return;
}
var sb = new StringBuilder();
var packedAssets = buildReport.packedAssets;
sb.AppendLine("Packed Assets:");
foreach (var packedAsset in buildReport.packedAssets)
{
var packedAssetInfoArray = packedAsset.contents;
sb.AppendLine($" {packedAsset.shortPath} Item count: {packedAssetInfoArray.Length}");
}
//Example output:
//Packed Assets:
// globalgamemanagers.assets Item count: 11
// resources.assets Item count: 2
// etc.
Debug.Log(sb.ToString());
}
}