How do remote catalogs work?

Can someone please explain the data flow for how catalogs work for remote web hosted assets? In our scenario, we have about 3,000 assets from about 500 different users which we dynamically load into the scene. In our old solutuon, our web service provides the asset bundle name which we changed when uploaded to the server.

So in new addressables way, we would have one catalog per assets, 3,000. We still need a GUID for each asset and associated in our database.

So when a game loads, does it go to our web server and read all the catalogs at once? Or can we tell it to only read the catalogs we want via our web service?

Also, any chance we can just get rid of the catalogs and just use the asset bundle? And if not, can we rename the catalog and asset bundle to our database defined GUID.

Thanks for the insight!

VR Architect

Similar to this, Assetbundles as Addressables

Thanks @Favo-Yang , no answer to my question on that post though.

Catalog is a mapping from address to bundle locations. Unfortunately, you can not use the system without a catalog to load bundles. If you understand the system enough, I believe you can create a catalog without loading it from a file/url.

However in your case, the easier way probably keep using asset bundles. Or you can prepare a catalog for all/part of users generate contents.

Thanks @Favo-Yang . I was afraid that would be the direction to go. My only concern is ensuring that old asset bundle code continues to have support in future Unity versions. Maybe I will check out their source code for what actually builds the bundles and use their new code minus the catalogs.

I my case, I have 100 model (one mesh + 6 texture). I write script build each model as new build.
step1: add modelXXX assets to asset group
step2: new build
step3: copy modelXXX.bundle + modelXXX.catalog (in ProjectDir\ServerData\StandaloneWindows\ I already rename it by build script) to server
step4: clear modelXXX assets from asset group
step5: loop step1
I will get model000.bundle + model000.catalog 、model001.bundle + model001.catalog …

When I need to load model000
step1: download model000.catalog from server
step2: save model000.catalog to disk.
step3: load model000.catalog, call Addressables.LoadContentCatalogAsync(model000catalogfilepath);
step4: use Addressables.InstantiateAsync 、Addressables.LoadAssetAsync to Instantiate model000.

Each modelXXX.catalog can only be load one times (Addressables.LoadContentCatalogAsync) or it will cause error.