# ReferencedAssetProvider

> An asset provider that resolves an address to a directly referenced asset. Use it when assets are assigned by reference rather than loaded from built content, a Resources folder, or Addressables.

## Definition

* **Type:** Class
* **Namespace:** [Unity.Localization.Providers](/engine/6000.7/script-reference/unity/localization/providers.md)
* **Assembly:** UnityEngine.LocalizationRuntimeModule
* **Implements:** [IAssetProvider](/engine/6000.7/script-reference/unity/localization/providers/iassetprovider.md), [ISynchronousAssetProvider](/engine/6000.7/script-reference/unity/localization/providers/isynchronousassetprovider.md)

```csharp
public sealed class ReferencedAssetProvider : IAssetProvider, ISynchronousAssetProvider
```

## Remarks

The address-to-reference map is populated through [ReferencedAssetProvider.Add](/engine/6000.7/script-reference/unity/localization/providers/referencedassetprovider/add.md), so [AssetKey.Address](/engine/6000.7/script-reference/unity/localization/providers/assetkey/address.md) is the key into that map. Loads complete immediately because the assets are already in memory. [ReferencedAssetProvider.Release](/engine/6000.7/script-reference/unity/localization/providers/referencedassetprovider/release.md) is a no-op: the references are owned by whatever holds this provider, so there is nothing to unload. The map is authored programmatically by the table editor, so it is hidden from the inspector.

Additional Resources: [IAssetProvider](/engine/6000.7/script-reference/unity/localization/providers/iassetprovider.md), [AssetProvider](/engine/6000.7/script-reference/unity/localization/providers/assetprovider.md), [ResourceFolderProvider](/engine/6000.7/script-reference/unity/localization/providers/resourcefolderprovider.md), [AssetKey](/engine/6000.7/script-reference/unity/localization/providers/assetkey.md)

Register a texture by address and load it back through the provider.

## Examples

```csharp
using Unity.Localization.Providers;
using UnityEngine;

namespace Unity.Localization.Samples
{
    public class ReferencedAssetProviderOverviewExample
    {
        public void Run()
        {
            var provider = new ReferencedAssetProvider();
            provider.Add("UI/Logo", new Texture2D(2, 2));

            var resolved = provider.TryLoadAsset<Texture2D>(new AssetKey("UI/Logo", typeof(Texture2D)), out var logo);

            Debug.Log(resolved);       // True
            Debug.Log(logo != null);   // True
        }
    }
}
```

## Methods

| Method                                                                                                               | Description                                                                                      |
| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| [Add](/engine/6000.7/script-reference/unity/localization/providers/referencedassetprovider/add.md)                   | Maps an address to a directly referenced asset, replacing any existing mapping for that address. |
| [Contains](/engine/6000.7/script-reference/unity/localization/providers/referencedassetprovider/contains.md)         | Checks whether an asset is registered under the given address.                                   |
| [Release](/engine/6000.7/script-reference/unity/localization/providers/referencedassetprovider/release.md)           | Does nothing, because this provider does not own the assets it returns.                          |
| [Remove](/engine/6000.7/script-reference/unity/localization/providers/referencedassetprovider/remove.md)             | Removes any entry registered under the given address.                                            |
| [TryLoadAsset](/engine/6000.7/script-reference/unity/localization/providers/referencedassetprovider/tryloadasset.md) | Resolves the referenced asset for the key without an asynchronous load.                          |
