きゅぶろぐ

きゅぶんずの ぶろぐができて べんりだな

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);