Skip to main content
Version: Next (dev)

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.

Context Menu

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:

FolderExamples
GameObjectGetGlobalPosition, FindChildByName, SetGlobalRotationToLookAt
ComponentGetOwner, GetWorld, IsActive
WorldCreateDynamicObject, DeleteObjectDelayed
PhysicsRaycast, OverlapTest, SweepTest
DebugDraw3DText, DrawLine, DrawCross
BlackboardSetEntryValue, GetEntryValue
LogInfo, Warning, Error
Value typesMake, 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.

note

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 for OnSimulationStarted and Update in Events, not in Component.
  • A few names carry a prefix that is not a folder. Array_GetElement is a top-level node whose name happens to start with Array_, while GetCount sits inside the Array folder. Searching finds both; browsing finds only one.

Generated nodes follow strict naming rules, so you can usually predict what to search for:

You wantSearch forExample
A function on a typeThe function nameGetGlobalPosition, Raycast
To react to a messageOn + message nameOnMsgTriggerTriggered
To send a messageSend + message nameSendMsgSetColor
An enum's valueEnum name + ValueTriggerStateValue
To branch on an enumEnum name + SwitchTriggerStateSwitch
To read a propertyGet + property nameGetColor
To write a propertySet + property nameSetColor

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.

ColourData type
GreyExecution flow, and untyped (Any) pins
RedBool
TealInt, Int64, and enum values
GreenFloat, Double, Angle
LimeColor
OrangeVector3, Quaternion, Transform
VioletTime
GrapeString, HashedString
BlueGameObject, Component, and other object references
PinkVariant, Array, Map
CyanCoroutine, 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_ConvertTo to 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.

See Also