ValueDropdownAttribute

ValueDropdown is used on any property and creates a dropdown with configurable options.

Use this to give the user a specific set of options to select from.

namespace Sirenix.OdinInspector
{
[AttributeUsageAttribute((AttributeTargets)32767, AllowMultiple = False, Inherited = True)]
public class ValueDropdownAttribute : Attribute
}

Requirements

Namespace: Sirenix.OdinInspector
Assembly: Sirenix.OdinInspector
Version: 2.0.0.0

See Also

Fields

Return Type Definition Description
bool AppendNextDrawer If true, instead of replacing the drawer with a wide dropdown-field, the dropdown button will be a little button, drawn next to the other drawer.
bool DisableGUIInAppendedDrawer Disables the the GUI for the appended drawer. False by default.
bool DisableListAddButtonBehaviour False by default.
bool DoubleClickToConfirm By default, a single click selects and confirms the selection.
bool DrawDropdownForListElements True by default. If the ValueDropdown attribute is applied to a list, then disabling this, will render all child elements normally without using the ValueDropdown. The ValueDropdown will still show up when you click the add button on the list drawer, unless DisableListAddButtonBehaviour is true.
int DropdownHeight Gets or sets the height of the dropdown. Default is zero.
string DropdownTitle Gets or sets the title for the dropdown. Null by default.
int DropdownWidth Gets or sets the width of the dropdown. Default is zero.
bool ExcludeExistingValuesInList If the ValueDropdown attribute is applied to a list, and IsUniqueList is set to true, then enabling this, will exclude existing values, instead of rendering a checkbox indicating whether the item is already included or not.
bool ExpandAllMenuItems If the dropdown renders a tree-view, then setting this to true will ensure everything is expanded by default.
bool FlattenTreeView By default, the dropdown will create a tree view.
bool HideChildProperties Whether to draw all child properties in a foldout.
bool IsUniqueList False by default.
string MemberName Name of any field, property or method member that implements IList. E.g. arrays or Lists.
int NumberOfItemsBeforeEnablingSearch The number of items before enabling search. Default is 10.
bool SortDropdownItems False by default.

Constructors

Definition Description
ValueDropdownAttribute(string) Creates a dropdown menu for a property.

Example

The following example shows a how the ValueDropdown can be used on an int property.

public class MyComponent : MonoBehaviour
{
	[ValueDropdown("myValues")]
	public int MyInt;

	// The selectable values for the dropdown.
	private int[] myValues = { 1, 2, 3 };
}

Example

The following example shows how ValueDropdownList can be used for objects, that do not implement a usable ToString.

public class MyComponent : MonoBehaviour
{
	[ValueDropdown("myVectorValues")]
	public Vector3 MyVector;

	// The selectable values for the dropdown, with custom names.
	private ValueDropdownList<Vector3> myVectorValues = new ValueDropdownList<Vector3>()
	{
		{"Forward",	Vector3.forward	},
		{"Back",	Vector3.back	},
		{"Up",		Vector3.up		},
		{"Down",	Vector3.down	},
		{"Right",	Vector3.right	},
		{"Left",	Vector3.left	},
	};
}

Example

The following example shows how the ValueDropdown can on any member that implements IList.

public class MyComponent : MonoBehaviour
{
	// Member field of type float[].
	private float[] valuesField;

	[ValueDropdown("valuesField")]
	public float MyFloat;

	// Member property of type List<thing>.
	private List<string> ValuesProperty { get; set; }

	[ValueDropdown("ValuesProperty")]
	public string MyString;

	// Member function that returns an object of type IList.
	private IList<ValueDropdownItem<int>> ValuesFunction()
	{
		return new ValueDropdownList<int>
		{
			{ "The first option",	1 },
			{ "The second option",	2 },
			{ "The third option",	3 },
		};
	}

	[ValueDropdown("ValuesFunction")]
	public int MyInt;
}

Example

Due to a bug in Unity, enums member arrays will in some cases appear as empty. This example shows how you can get around that.

public class MyComponent : MonoBehaviour
{
	// Make the field static.
	private static MyEnum[] MyStaticEnumArray = MyEnum[] { ... };

	// Force Unity to serialize the field, and hide the property from the inspector.
	[SerializeField, HideInInspector]
	private MyEnum MySerializedEnumArray = MyEnum[] { ... };
}