Search Unity

How do remote catalogs work?

Discussion in 'Addressables' started by ScottPeal, Sep 23, 2019.

  1. ScottPeal

    ScottPeal

    Joined:
    Jan 14, 2013
    Posts:
    61
    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
     
  2. Favo-Yang

    Favo-Yang

    Joined:
    Apr 4, 2011
    Posts:
    464
  3. ScottPeal

    ScottPeal

    Joined:
    Jan 14, 2013
    Posts:
    61
    Thanks @Favo-Yang , no answer to my question on that post though.
     
  4. Favo-Yang

    Favo-Yang

    Joined:
    Apr 4, 2011
    Posts:
    464
    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.
     
  5. ScottPeal

    ScottPeal

    Joined:
    Jan 14, 2013
    Posts:
    61
    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.
     
  6. leebs0117

    leebs0117

    Joined:
    Jul 1, 2013
    Posts:
    7
    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.