Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


NodeView<T>

Derive from this class to add custom UI to the view generated for a specific NodeView<T>.Node type.
Read time 3 minutesLast updated 6 days ago

Definition

public class NodeView<T> where T : Node

Remarks

A VisualElement is built for every NodeView<T>.Node that appears in a graph. A NodeView<T> lets you inject custom UI into that generated element. Subclasses are discovered by their type parameter: for a NodeView<T>.Node of type
T
, the concrete NodeView<T> whose type argument matches is used, walking up the NodeView<T>.Node inheritance chain if there is no exact match.
The NodeView<T>.Node instance is available through NodeView<T>.Node once the view is constructed. Access the generated visual element through NodeView<T>.View and add custom UI to INodeView.Root.
Allocate custom UI in NodeView<T>.OnViewBuilt and re-add it in NodeView<T>.OnCullingChanged (when
cullingEnabled
is
false
). Do not allocate UI in NodeView<T>.OnViewAttached: that callback can fire multiple times during a node's lifetime — for example when the user tabs away from and back to the graph view, or when a block node is dragged and re-parented — and any UI you allocate there accumulates as duplicates. When a node returns from being culled, the contents of INodeView.Root are cleared, so a cached reference is no longer parented; re-add it from NodeView<T>.OnCullingChanged to avoid allocating a new element.
Additional Resources: NodeView<T>.Node, INodeView

Examples

// The Node type that this view customizes.class MyNode : Node{ protected override void OnDefinePorts(IPortDefinitionContext context) { context.AddInputPort<float>("input"); }}// This view is constructed for every MyNode instance in a graph.class MyNodeView : NodeView<MyNode>{ Label m_Label; public override void OnViewBuilt() { // Allocate custom UI once, after the built-in UI is ready and before the node attaches to a // panel. Cache the reference so OnCullingChanged can re-add it without allocating again. m_Label = new Label($"Node: {Node.Title}"); View.Root.Add(m_Label); } public override void OnCullingChanged(bool cullingEnabled) { // When cullingEnabled is false, the node has just returned from being culled and Root has // been cleared. Re-add the cached element — no allocation needed. if (!cullingEnabled && m_Label != null) View.Root.Add(m_Label); }}

Properties

Property

Description

NodeThe NodeView<T>.Node instance this view customizes.
ViewThe generated view for this node. Add custom UI to INodeView.Root.

Methods

Method

Description

OnCullingChangedCalled when the node's culling state changes.
OnViewAttachedCalled when the node's INodeView.Root is attached to a UI panel.
OnViewBuiltCalled once, after the node's built-in UI is fully constructed and before its VisualElement is attached to the graph view.
OnViewDetachedCalled when the node's INodeView.Root is detached from its UI panel.
OnViewLODChangedCalled when the graph view's zoom level changes.