Downloads / Asset Store / Documentation
Support xNode on Ko-fi or Patreon
Thinking of developing a node-based plugin? Then this is for you. You can download it as an archive and unpack to a new unity project, or connect it as git submodule.
xNode is super userfriendly, intuitive and will help you reap the benefits of node graphs in no time. With a minimal footprint, it is ideal as a base for custom state machines, dialogue systems, decision makers etc.
- Lightweight in runtime
- Very little boilerplate code
- Strong separation of editor and runtime code
- No runtime reflection (unless you need to edit/build node graphs at runtime. In this case, all reflection is cached.)
- Does not rely on any 3rd party plugins
- Custom node inspector code is very similar to regular custom inspector code
- Supported from Unity 5.3 and up
- Getting started - create your very first node node and graph
- Examples branch - look at other small projects
Instructions
Via Git URL(Requires Unity version 2018.3.0b7 or above)
To install this project as a Git dependency using the Unity Package Manager,
add the following line to your project's manifest.json:
"com.github.siccity.xnode": "https://github.com/siccity/xNode.git"
You will need to have Git installed and available in your system's PATH.
If you are using Assembly Definitions in your project, you will need to add XNode and/or XNodeEditor as Assembly Definition References.
Via OpenUPM
The package is available on the openupm registry. It's recommended to install it via openupm-cli.
openupm add com.github.siccity.xnode
Via Git Submodule
To add xNode as a submodule in your existing git project, run the following git command from your project root:
git submodule add git@github.com:Siccity/xNode.git Assets/Submodules/xNode
If no source control or package manager is available to you, you can simply copy/paste the source files into your assets folder.
// public classes deriving from Node are registered as nodes for use within a graphpublicclassMathNode:Node{// Adding [Input] or [Output] is all you need to do to register a field as a valid port on your node [Input]publicfloata;[Input]publicfloatb;// The value of an output node field is not used for anything, but could be used for caching output results[Output]publicfloatresult;[Output]publicfloatsum;// The value of 'mathType' will be displayed on the node in an editable format, similar to the inspectorpublicMathTypemathType=MathType.Add;publicenumMathType{Add,Subtract,Multiply,Divide}// GetValue should be overridden to return a value for any specified output portpublicoverrideobjectGetValue(NodePortport){// Get new a and b values from input connections. Fallback to field values if input is not connectedfloata=GetInputValue<float>("a",this.a);floatb=GetInputValue<float>("b",this.b);// After you've gotten your input values, you can perform your calculations and return a valueif(port.fieldName=="result")switch(mathType){caseMathType.Add:default:returna+b;caseMathType.Subtract:returna-b;caseMathType.Multiply:returna*b;caseMathType.Divide:returna/b;}elseif(port.fieldName=="sum")returna+b;elsereturn0f;}}Plugins are repositories that add functionality to xNode
- xNodeGroups: adds resizable groups
Join the Discord server to leave feedback or get support. Feel free to also leave suggestions/requests in the issues page.

