Skip to content

Graph Editors

Thor Brigsted edited this page Nov 15, 2019 · 18 revisions
class NodeGraph : NodeEditorBase

What?

Every graph is drawn with a GraphEditor. Just like with Unity's custom editors, you can override a lot of the functionality that draws the graph.

Example

Like regular editor scripts, node graph editors scripts must be placed in an Editor folder, and their class cannot be abstract.

[CustomNodeGraphEditor(typeof(MyGraph))]
public class MyGraphEditor : NodeGraphEditor {

}

Tips

Filter which nodes are shown in creation menu GetNodeMenuName override lets you specify the path of a specified node, but it also lets you hide it by returning null. To filter all but a specific base class you can use this snippet.
public override string GetNodeMenuName(Node node) {
    if (node is MyBaseNode)) {
        return base.GetNodeMenuName(node);
    } else return null;
}
Store preferences specific to your node graph or project
  1. Add a unique EditorPrefs key to the attribute
[CustomNodeGraphEditor(typeof(MyGraph), "MyGraph.Settings")]
  1. Override GetDefaultPreferences(); to set default preferences
public override NodeEditorPreferences.Settings GetDefaultPreferences() {
    return new NodeEditorPreferences.Settings() {
        gridBgColor = Color.black,
        gridLineColor = Color.white,
        typeColors = new Dictionary<string, Color>() {
            { typeof(string).PrettyName(), Color.yellow },
            { typeof(MyType).PrettyName(), new Color(1,0.5f,0.6f) }
        }
    };
}
Repaint each frame

Sometimes you may want your nodes to repaint every frame. This is achievable though spamming 'repaint me' in OnGUI. Don't worry, it won't freeze :)

public override void OnGUI() {
    // Keep repainting the GUI of the active NodeEditorWindow
    NodeEditorWindow.current.Repaint();
}
Clone this wiki locally