# VariantSelectorMetadata

> Makes a key variant-driven by attaching the selector that chooses its current variant.

## Definition

* **Type:** Class
* **Namespace:** [Unity.Localization](/engine/6000.7/script-reference/unity/localization.md)
* **Assembly:** UnityEngine.LocalizationRuntimeModule
* **Implements:** [IMetadata](/engine/6000.7/script-reference/unity/localization/imetadata.md)

```csharp
public class VariantSelectorMetadata : IMetadata
```

## Remarks

Attach it to a shared key's metadata for a per-key [IVariantSelector](/engine/6000.7/script-reference/unity/localization/ivariantselector.md), or to the [SharedTableData](/engine/6000.7/script-reference/unity/localization/sharedtabledata.md) for a default that every key in the collection inherits. The selector lives on the shared data, not the per-locale entry, so it stays the same across locales. Variant values themselves are stored per locale; add them with [ResourceTable.AddStringVariant](/engine/6000.7/script-reference/unity/localization/resourcetable/addstringvariant.md), which registers the variant keys here.

Additional Resources: [IVariantSelector](/engine/6000.7/script-reference/unity/localization/ivariantselector.md), [SharedTableData](/engine/6000.7/script-reference/unity/localization/sharedtabledata.md)

Attach a selector and add a variant value from script.

## Examples

```csharp
namespace Unity.Localization.Samples
{
    public static class AddVariantByScriptExample
    {
        public static void MakeWishlistVaryByStorefront(ResourceTable table)
        {
            // The default value, used wherever no variant matches.
            table.AddStringEntry("wishlist", "Add to wishlist");

            // The selector lives on the shared key, so every locale resolves the same way.
            var key = table.SharedData.GetEntry("wishlist");
            if (key.Metadata.GetMetadata<VariantSelectorMetadata>() == null)
                key.Metadata.AddMetadata(new VariantSelectorMetadata(new StorefrontVariantSelector()));

            // The value this locale shows when the selector reports "GOG".
            table.AddStringVariant("wishlist", "GOG", "Add to GOG wishlist");
        }

        public static void RemoveTheVariant(ResourceTable table)
        {
            table.RemoveVariant("wishlist", "GOG");
        }
    }
}
```

## Constructors

| Constructor                                                                                                                                                                                    | Description                              |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| [VariantSelectorMetadata()](/engine/6000.7/script-reference/unity/localization/variantselectormetadata/ctor.md#variantselectormetadata\(\))                                                    | Creates empty variant metadata.          |
| [VariantSelectorMetadata(Unity.Localization.IVariantSelector)](/engine/6000.7/script-reference/unity/localization/variantselectormetadata/ctor.md#variantselectormetadata\(ivariantselector\)) | Creates variant metadata for a selector. |

## Properties

| Property                                                                                           | Description                                                                           |
| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| [Keys](/engine/6000.7/script-reference/unity/localization/variantselectormetadata/keys.md)         | The variant keys authored for this scope, used by the editor to lay out variant rows. |
| [Selector](/engine/6000.7/script-reference/unity/localization/variantselectormetadata/selector.md) | The selector that chooses the current variant key.                                    |

## Methods

| Method                                                                                               | Description                                        |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| [AddKey](/engine/6000.7/script-reference/unity/localization/variantselectormetadata/addkey.md)       | Adds `key` to the authored variant keys if absent. |
| [RemoveKey](/engine/6000.7/script-reference/unity/localization/variantselectormetadata/removekey.md) | Removes `key` from the authored variant keys.      |
