-
Notifications
You must be signed in to change notification settings - Fork 111
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.
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 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}");
}