nesrak1 / AssetsTools.NET

Read and write unity assets/bundle files, based on https://github.com/SeriousCache/UABE
MIT License
518 stars 101 forks source link

This is an issue about modifing all the texture2d assets' name in an AB contains texture2D and Sprite assets #119

Open 544051996 opened 1 year ago

544051996 commented 1 year ago

`AssetsManager manager = new AssetsManager(); var bunInst = manager.LoadBundleFile(bundlePath); var bun = bunInst.file; int fileTotal = bun.GetAllFileNames().Count;

for(int i = 0; i<fileTotal; i++) { var afileInst = manager.LoadAssetsFileFromBundle(bunInst, i, true); var afile = afileInst.file; foreach(var texInfo in afile.GetAssetsOfType(AssetClassID.Texture2D)) { var texBase = manager.GetBaseField(afileInst, texInfo); ....... } }`

For AB contains both texture2D and Sprite assets, there is a NullReferenceException:Object reference not set to an instance of an object. AssetsTools.NET.Extra.AssetsManager.GetTemplateBaseField. AssetsTools.NET.Extra.AssetsReadFlags.readFlags. AssetsTools.NET.Extra.AssetsManager.GetTemplateBaseField.

For AB only contains texture2D asset it goes well and modified all the texture2D name successfully

nesrak1 commented 1 year ago

GetTemplateBaseField is a big method so it could be anywhere. I doubt it has to do with sprites being in the bundle. Maybe check if your bundle has a type tree with afile.Metadata.TypeTreeEnabled? If it's not enabled, you need to load a tpk.