catalog.json

Revision as of 12:57, 10 December 2024 by TadeLn (talk | contribs)

catalog.json is a file used by the com.unity.addressables library. It is a list of all assets used in a game.

JSON structure

  • (root)
    • m_LocatorId (string) - Name of this catalog, for example: AddressablesMainContentCatalog
    • m_BuildResultHash (string) - Hash of the catalog build, for example: 71d0441090abbc8f1a7305f2ea3c8b62. Notably, it seems to be different from catalog_catalog.hash
    • m_InstanceProviderData (provider object) - InstanceProvider information. See #Provider object structure for details.
    • m_SceneProviderData (provider object) - SceneProvider information. See #Provider object structure for details.
    • m_ResourceProviderData (array) - All available resource providers.
    • m_ProviderIds (array) - List of some of the IDs from m_ResourceProviderData.
      • (string) - An ID of a resource provider, for example: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider.
    • m_InternalIds (array) - List of all internal IDs. These IDs are most likely used by the game, and this list is used to find details about the asset.
      • (string) - An internal ID. May be a weird path, for example: {UnityEngine.AddressableAssets.Addressables.RuntimePath}/Android/crilocaldata_assets_all.bundle; a 32-character-long hexadecimal string, for example: 033f3660efceadd40b8cd2845b485652; an asset path, for example: Assets/CriData/Addressables/dice20.daily.0.acb=4493e0.asset; a short name, for example: EfficientBlur; a URL, for example: http://rizastcdn.pigeongames.cn/default/Android/1a2a40bd550976c58c842045215f204e.bundle; and it probably can be any other UTF-8 string.
    • m_KeyDataString (string) - Base64 encoded string containing binary data. See #Key data binary format for details.
    • m_BucketDataString (string) - Base64 encoded string containing binary data. See #Bucket data binary format for details.
    • m_EntryDataString (string) - Base64 encoded string containing binary data. See #Entry data binary format for details.
    • m_ExtraDataString (string) - Base64 encoded string containing binary data. See #Extra data binary format for details.
    • m_resourceTypes (array) - A list of all of the types of assets in the catalog.
      • (object type object) - An object type, for example: {"m_AssemblyName": "UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "m_ClassName": "UnityEngine.TextAsset"}. See #Object type object structure for details.

Provider object structure

  • (root)
    • m_Id (string) - ID of this provider, for example: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider.
    • m_ObjectType (object type object) - Object type of this provider, for example: {"m_AssemblyName": "Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "m_ClassName": "UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider"}. See #Object type object structure for details.
    • m_Data (string) - Additional data for this provider. So far, only empty strings have been found.

Object type object structure

  • (root)
    • m_AssemblyName (string) - Assembly name of the object's class, for example: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.
    • m_ClassName (string) - This object's class name, for example: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider.

Binary formats

Note: All values are in little-endian.

Key data binary format

  • (root)
    • key_count (uint32) - 4-byte integer, indicating the amount of keys stored in the whole structure.
    • keys (array) - A list of keys. The length of the list can be determined by either using the key_count field, or reading until the end of the binary data.
      • (struct) - A key. The size of the struct is variable.
        • key_type (uint8) - 1-byte number, indicating the type of the key. Known key types are: 0 - UTF-8 key; 1 - UTF-16 key; 4 - int32 key.
        • key_content (union)
          • text_content (sized string struct) - Only present if key type is 0 or 1. The type of the string is UTF-8 if key_type is 0 and UTF-16 (little-endian) if key_type is 1. This field is the key's name. See #Sized string binary format for details.
          • numeric_content (uint32) - Only present if key type is 4. This field is the key's name.

Bucket data binary format

  • (root)
    • bucket_count (uint32) - 4-byte integer, indicating the amount of buckets stored in the whole structure.
    • buckets (array) - A list of buckets. The length of the list can be determined by either using the bucket_count field, or reading until the end of the binary data.
      • (struct) - A bucket. The size of the struct is variable.
        • bucket_id (uint32) - 4-byte integer, probably some kind of bucket ID.
        • entry_count (uint32) - 4-byte integer, determining the amount of entries in the entries array.
        • entries (array) - Array of 4-byte indices. The length of this array is determined by the entry_count field.
          • (uint32) - An index. This value is used to index the array that is contained within the binary blob encoded in m_EntryDataString.

Entry data binary format

[unfinished]

Extra data binary format

[unfinished]

Sized string binary format

  • (root)
    • length (uint32) - 4-byte integer, determines the amount of bytes in the text field.
    • text (array) - Byte array with the contents of the string. The exact format (UTF-8 vs UTF-16) must be determined separately.
      • (uint8) - A byte within the string.