Reading the Palette
Right-click in the graph editor to open the node palette, and type to search it. This page explains why the list contains what it does, how to guess a node's name before you search for it, and what the pin colours mean.
Where nodes come from
Nodes reach the palette three different ways. This matters because it tells you what to expect, and why a colleague on another project may see a different list.
1. Built-in nodes — always present
About 57 nodes are built into visual scripting itself: branches, loops, maths, variables, arrays, coroutines and type conversion. They are the same in every project and every scene. These are documented in full under Node Reference.
These sit at the top level of the palette rather than inside a folder — Branch,
ForLoop, Add, GetVariable and so on.
2. Engine nodes — always present
Most of what you use is generated automatically from the engine's own C++. Any engine function marked as script-callable becomes a node. Because these come from the engine itself, they are in every project too:
| Folder | Examples |
|---|---|
GameObject | GetGlobalPosition, FindChildByName, SetGlobalRotationToLookAt |
Component | GetOwner, GetWorld, IsActive |
World | CreateDynamicObject, DeleteObjectDelayed |
Physics | Raycast, OverlapTest, SweepTest |
Debug | Draw3DText, DrawLine, DrawCross |
Blackboard | SetEntryValue, GetEntryValue |
Log | Info, Warning, Error |
| Value types | Make, MakeRGBA, MakeFromSeconds |
3. Project nodes — depend on your project
The same mechanism runs over whatever plugins, packages and custom C++ your project loads. Every component gets nodes for its functions and properties; every message type gets a handler node and a sender node; every enum gets a value node and a switch node.
This is the tier that varies. If a tutorial mentions a node you cannot find, the plugin that provides it probably is not enabled in your project.
Because of this, a screenshot of the palette is only ever true for the project it was taken in. When following a recipe, search for the node by name rather than hunting for it in the same menu position.
Folders, and finding a node
The palette groups nodes into folders — GameObject, Physics, Debug, Logic,
Math, Array and so on — but a node's name is just its own name. These docs
refer to GetGlobalPosition, not GameObject/GetGlobalPosition, because that is
what you see on the node and what you type to find it.
Searching ignores the folders entirely, so typing the name is almost always faster than browsing to it.
Two things about folders are worth knowing:
- Entry points are all in
Events, whichever type they belong to. Look forOnSimulationStartedandUpdateinEvents, not inComponent. - A few names carry a prefix that is not a folder.
Array_GetElementis a top-level node whose name happens to start withArray_, whileGetCountsits inside theArrayfolder. Searching finds both; browsing finds only one.
Generated nodes follow strict naming rules, so you can usually predict what to search for:
| You want | Search for | Example |
|---|---|---|
| A function on a type | The function name | GetGlobalPosition, Raycast |
| To react to a message | On + message name | OnMsgTriggerTriggered |
| To send a message | Send + message name | SendMsgSetColor |
| An enum's value | Enum name + Value | TriggerStateValue |
| To branch on an enum | Enum name + Switch | TriggerStateSwitch |
| To read a property | Get + property name | GetColor |
| To write a property | Set + property name | SetColor |
Pin colours
Every pin is colour-coded by the kind of data it carries. Compatible pins share a colour; when you start dragging from a pin, incompatible ones grey out.
| Colour | Data type |
|---|---|
| Grey | Execution flow, and untyped (Any) pins |
| Red | Bool |
| Teal | Int, Int64, and enum values |
| Green | Float, Double, Angle |
| Lime | Color |
| Orange | Vector3, Quaternion, Transform |
| Violet | Time |
| Grape | String, HashedString |
| Blue | GameObject, Component, and other object references |
| Pink | Variant, Array, Map |
| Cyan | Coroutine, Byte |
Two useful consequences:
- Orange pins are interchangeable in principle but not in practice — a Vector3 is not a Transform. The colour tells you they are the same family, not that they connect.
- Pink means "type not known yet". A Variant can hold anything, which is why
you often need
Variant_ConvertToto get a usable value out of one.
Numbers convert freely between themselves, and nearly everything converts to String — connect a number pin to a text pin and it converts automatically.
Execution pins versus data pins
- Execution pins are the grey arrow-shaped pins along the top. They define the order things happen in. Flow runs left to right.
- Data pins are the round ones. They carry values.
A node with an incoming execution pin must have it connected, or it will never
run. A node with no execution pins at all — like GetVariable or
Make — is evaluated on demand, whenever a node that is running asks for
its output.
Nodes with only an outgoing execution pin are entry points. See Entry Points and Events.