-
-
Notifications
You must be signed in to change notification settings - Fork 612
Graph Editors
Thor Brigsted edited this page Nov 15, 2019
·
18 revisions
class NodeGraph : NodeEditorBase
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.
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 {
}
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
- Add a unique EditorPrefs key to the attribute
[CustomNodeGraphEditor(typeof(MyGraph), "MyGraph.Settings")]
- 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();
}