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

NodeView<T0>

class in Unity.GraphToolkit.Editor

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

Derive from this class to add custom UI to the view generated for a specific NodeView<T0>.Node type.

A VisualElement is built for every NodeView<T0>.Node that appears in a graph. A NodeView<T0> lets you inject custom UI into that generated element. Subclasses are discovered by their type parameter: for a NodeView<T0>.Node of type T, the concrete NodeView<T0> whose type argument matches is used, walking up the NodeView<T0>.Node inheritance chain if there is no exact match.

The NodeView<T0>.Node instance is available through NodeView<T0>.Node once the view is constructed. Access the generated visual element through NodeView<T0>.View and add custom UI to INodeView.Root.

Important: allocate custom UI in NodeView<T0>.OnViewBuilt and re-add it in NodeView<T0>.OnCullingChanged (when cullingEnabled is false). Do not allocate UI in NodeView<T0>.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<T0>.OnCullingChanged to avoid allocating a new element.

 // 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
Node The NodeView<T0>.Node instance this view customizes.
View The generated view for this node. Add custom UI to INodeView.Root.

Public Methods

Method Description
OnCullingChanged Called when the node's culling state changes.
OnViewAttached Called when the node's INodeView.Root is attached to a UI panel.
OnViewBuilt Called once, after the node's built-in UI is fully constructed and before its VisualElement is attached to the graph view.
OnViewDetached Called when the node's INodeView.Root is detached from its UI panel.
OnViewLODChanged Called when the graph view's zoom level changes.