Declares a struct as a UI Toolkit component: a reusable piece of data and behavior that you can attach to any VisualElement.
Components extend elements through composition instead of inheritance. Rather than writing a
custom element subclass, declare a partial struct with this attribute and attach an
instance to any element with VisualElement.AddComponent. The same component
type works on any element, whatever its type.
This attribute targets structs. The struct must be declared partial: Unity's source
generator completes it, implementing IVisualElementComponent and generating
the registration code for you.
An element holds at most one component of each type. Read or modify an attached component
with VisualElement.GetComponent; remove it with
VisualElement.RemoveComponent.
The following example attaches a click counter to a button without subclassing it.
using UnityEngine; using UnityEngine.UIElements;
[VisualElementComponent] public partial struct ClickCounter { public int count; }
public static class ClickCounterExample { public static void Attach(Button button) { // Attach the component with its starting value. button.AddComponent(new ClickCounter { count = 0 });
button.RegisterCallback<ClickEvent>(evt => { // GetComponent returns a reference: the increment is stored on the element. ref var counter = ref button.GetComponent<ClickCounter>(); counter.count++; Debug.Log($"Clicked {counter.count} times."); }); } }
| Property | Description |
|---|---|
| exposeToUxml | Whether the component can be authored in UXML. The fields marked UxmlAttributeAttribute define the component's authorable surface either way; this flag only decides whether UXML sees it. Pass false for a component that is attached from code only. |
| initialCapacity | The number of storage slots Unity reserves up front for this component type. Set it to roughly how many elements you expect to carry this component at the same time. |
| name | The name that identifies this component in UXML. If not set, the struct's name is used. |
| Constructor | Description |
|---|---|
| VisualElementComponentAttribute | Initializes a new instance of the VisualElementComponentAttribute class. |