AddressableでビルドしたAssetBundleのファイルサイズを列挙する
Bundle Naming Modeを"Filename"とかにしていれば出力したファイルを見れば良いだけなのですが、
"Use Hash of Filename"等を使っていると、どのファイルがどのAssetか見分けが付かなくなるので、どうにかしました。
var results = new List<(string, long)>();
var settings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Settings;
var groups = settings.groups;
foreach (var assetGroup in groups)
{
var scheme = assetGroup.GetSchema<BundledAssetGroupSchema>();
if (scheme == null) continue;
var groupName = assetGroup.Name.Replace(" ", "").Replace('\\', '/').Replace("//", "/").ToLowerInvariant();
foreach (var entry in assetGroup.entries)
{
var assetBundleName = $"{groupName}_assets_{entry.address.Replace(" ", "").Replace('\\', '/').ToLowerInvariant()}.bundle";
var assetPath = Path.Combine(scheme.BuildPath.GetValue(settings), $"{HashingMethods.Calculate(assetBundleName).ToString()}.bundle");
var fileInfo = new FileInfo(assetPath);
results.Add((entry.address, fileInfo.Length));
}
}
var total = results.Sum(x => x.Item2);
var text = $"# Addressable Build Report {BytesToString(total)}\n";
foreach (var result in results.OrderByDescending(x => x.Item2))
{
text += $"- {(double) result.Item2 / total * 100.0:00.00}% {BytesToString(result.Item2)} {result.Item1}\n";
}
File.WriteAllText("AddressableBuildReport.txt", text);