Version: Unity 6.7 Alpha (6000.7)
LanguageEnglish
  • C#

DictionaryDisplayForTypeAttribute

class in UnityEngine

/

Inherits from:DictionaryDisplayAttribute

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Description

Configures how the Inspector presents a serialized Dictionary<TKey, TValue> identified by type, for dictionaries that have no field to decorate.

DictionaryDisplayForType is the assembly-level form of DictionaryDisplayAttribute. It has the same presentation settings: layout, keyLabel, valueLabel, and keyColumnFraction. The difference is that you name the dictionary to configure with a typeof argument instead of attaching the attribute to a field.

This attribute targets assemblies, so you apply it with an assembly-level attribute declaration. Use it to:

  • Configure a dictionary that has no field to attach a field attribute to, such as the inner dictionary of a Dictionary<int, Dictionary<string, StatModifier>>.
  • Apply one presentation to every field of the same dictionary type from a single declaration, instead of repeating DictionaryDisplayAttribute on each field.

The targetType must be a fully specified Dictionary<TKey, TValue>, such as Dictionary<string, StatModifier>. The attribute applies to every dictionary of that exact type, wherever it appears, and sets the layout, labels, and key-column fraction. Unity ignores a target that isn't a fully specified dictionary type.

You can only declare a rule for a dictionary when the attribute's assembly defines the dictionary's key type, its value type, or a type nested inside either. For example, an assembly that defines StatModifier can target Dictionary<string, StatModifier>, Dictionary<int, StatModifier[]>, or Dictionary<int, List<StatModifier>>. This prevents a rule in one assembly from changing a dictionary built only from types it doesn't define, such as Dictionary<int, int>. If the target uses no type from the attribute's assembly, Unity ignores the rule and logs a warning in the console.

When more than one source can set a dictionary's presentation, Unity uses the first source that applies, from highest precedence to lowest:

  1. The user's own choices: the layout from the header context menu and the column width from dragging the divider. These choices persist and override every attribute until the user selects Reset to Defaults.
  2. A field-level DictionaryDisplayAttribute on the dictionary field sets the layout, labels, and width.
  3. An assembly-level DictionaryDisplayForType on the exact Dictionary<TKey, TValue> sets the layout, labels, and width.
  4. The built-in defaults: DictionaryLayout.TwoColumns layout, Key and Value labels, and a 0.5 key-column fraction.
using System.Collections.Generic;
using UnityEngine;

// One declaration configures every Dictionary<string, StatModifier> in the assembly: the nested // dictionary in Equipment and the field in Buff, without repeating [DictionaryDisplay]. This // assembly defines StatModifier, so the attribute is allowed to target this dictionary. [assembly: DictionaryDisplayForType(typeof(Dictionary<string, StatModifier>), layout = DictionaryLayout.OneColumnWithValueVisible, keyLabel = "Stat", valueLabel = "Modifier", keyColumnFraction = 0.4f)]

[System.Serializable] public struct StatModifier { public float amount; public bool isPercentage; }

public class Equipment : MonoBehaviour { // Nested inner dictionary: a value, so it has no field to decorate. [SerializeField] private Dictionary<int, Dictionary<string, StatModifier>> modifiersPerSlot = new(); }

public class Buff : MonoBehaviour { // A direct field of the same type, styled by the same declaration. [SerializeField] private Dictionary<string, StatModifier> statModifiers = new(); }

Properties

Property Description
targetTypeThe dictionary type this attribute configures. Must be a fully specified Dictionary<TKey, TValue>, for example Dictionary<string, StatModifier>.

Constructors

Constructor Description
DictionaryDisplayForTypeAttributeCreates an attribute that configures the dictionary type identified by targetType.

Inherited Members

Properties

PropertyDescription
keyColumnFractionThe initial width of the key column, as a fraction of the total dictionary width. Clamped to the range [0.01, 0.99].
keyLabelThe text displayed above the key column.
layoutThe column layout the Inspector uses to present the dictionary.
valueLabelThe text displayed above the value column.