Skip to content

Reading asset paths from resources.assets and bundles

nesrak1 edited this page Sep 23, 2023 · 2 revisions

This isn't a feature of the library, but it may be helpful to know. Some assets such as resources assets have full paths rather than just names. UABE shows these paths in the Container column.

resources.assets

Open globalgamemanagers and check the ResourceManager asset and its m_Container list.

var am = new AssetsManager();
am.LoadClassPackage("classdata.tpk");

var ggm = am.LoadAssetsFile(Path.Combine(args[0], "globalgamemanagers"), false);
am.LoadClassDatabaseFromPackage(ggm.file.Metadata.UnityVersion);

var rsrcInfo = ggm.file.GetAssetsOfType(AssetClassID.ResourceManager)[0];
var rsrcBf = am.GetBaseField(ggm, rsrcInfo);

var m_Container = rsrcBf["m_Container.Array"];

foreach (var data in m_Container.Children)
{
    var name = data[0].AsString;
    var pathId = data[1]["m_PathID"].AsLong;

    Console.WriteLine($"in resources.assets, pathid {pathId} = {name}");
}

This helps you give full paths to assets in resources.assets.

Bundles

Bundles are much the same, but in the AssetBundle asset (usually at path id 1).

var am = new AssetsManager();

var bun = am.LoadBundleFile("bundle.unity3d");
var assetInst = am.LoadAssetsFileFromBundle(bun, 0, true);

var abInfo = assetInst.file.GetAssetsOfType(AssetClassID.AssetBundle)[0];
var abBf = am.GetBaseField(assetInst, abInfo);

var m_Container = abBf["m_Container.Array"];
foreach (var data in m_Container.Children)
{
    var name = data[0].AsString;
    var pathId = data[1]["asset.m_PathID"].AsLong;

    Console.WriteLine($"in this bundle, pathid {pathId} = {name}");
}
Clone this wiki locally