How-To: Author a Skill Tree

Goal: build a tree's gameplay structure in the Logic graph (skills, dependencies, sub-nodes) and its player-facing layout in the Visual graph.

Prerequisites
You have a UCrimsonSkillTree asset open (Quick Start step 4).

1. Build the Logic graph

In Logic mode, right-click -> Add Skill for each node and wire parent -> child (left to right). Everything unlockable at the start wires from the Root node's Out pin (Root is auto-spawned and can't be deleted).

Logic graph: Root -> Skill nodes wired parent to child. Double-click a wire to drop a Reroute knot.
NodePurpose
RootImplicit prerequisite anchor; wire start-unlockable skills from its Out pin
SkillWraps a UCrimsonSkillTree_Node; hosts sub-nodes and the gameplay payload
BridgeAuto-managed gate; activates when its prerequisites are met (sub-tree gating)
RerouteEditor-only knot for tidy wiring; compile follows reroute chains through

2. Attach sub-nodes (conditions, events, costs)

Click the + button on a section header (Conditions, Events, Costs) to add that sub-node type instantly; the Per-Edge header's + opens a small menu for Add Edge Condition / Add Edge Event. (Right-clicking the Skill -> Add Sub-Node still works too.) Sub-nodes are BT-style and drag-reorderable within their typed lane, and the color band shows the type.

Use the + button on each section header to add a sub-node (Per-Edge's + is a dropdown). Amber = condition, Teal = event, Blue = cost.
Sub-nodeColorPayload
Activation ConditionAmberUCrimsonSkillTree_ActivationConditionBase - must pass before the node activates
Node EventTealUCrimsonSkillTree_NodeEventBase - fires on level-up / level-down / reset
CostBlueFNodeResourceCost - flat or curve-scaled per level
Edge Condition / Edge EventAmber / Teal (edge-scoped)Gates / reacts to a specific incoming edge via a FromParentGuid selector (zero = all edges)

3. Lay out the Visual graph

Switch to Visual mode. Each Logic Skill has a mirror that renders a live UMG preview of its node widget. Drag mirrors freely (positions are independent of logic), set a per-node PreviewWidgetClass / PreviewLevel in Details (the class picker lists any Widget Blueprint implementing ICrimsonSkillTreeNodeWidget, whatever it derives from), and add Decoration nodes (Panel / Header / Divider) for framing.

Visual graph: live-preview skill mirrors laid out, with a Panel decoration behind a branch.
Verify
Compile (auto-runs validators). Every Logic Skill has a Visual mirror, and the live previews render at the PreviewLevel you set. Style the connections next.

Bridge nodes and junctions

A Bridge is an auto-activating gate: it turns on by itself once its prerequisites are met and the player never clicks it. Bridges mirror into the Visual graph like any other node, so you position them and their connections draw normally.

To make a bridge read as a pure junction - one line forking into several - give it the ready-made UCrimsonSkillTreeWidget_JunctionNode widget class. Leave Show Pip off and it draws nothing, so the lines simply fork; turn it on for a small dot tinted by the node state (inactive / active / maxed). Connections meet at the junction center, and it is hit-test invisible in game so it never steals clicks from real nodes.

Still easy to grab
The Visual graph renders a node widget and nothing else, so an invisible junction keeps a Junction Size footprint (24x24 by default) to click and drag - and shows a faint ring there so you can find it. The ring is editor-only; the footprint is reserved in game too, which is what keeps the editor and the game agreeing on where the lines meet. Enlarge Junction Size if you want a bigger grab area.
Assign itHow
One nodeThe visual node's Preview Widget Class
Every bridgeGraphConfig.NodeTypeToWidgetClassMap, keyed by the bridge node-type tag
Shaping the fork
Because each connection owns its own curve, you can bend each outgoing line individually (How-To: Shape Connections) so the fan out of a junction looks deliberate instead of a starburst.

See also

  • How-To: Style Connections - material-capable spline lines
  • Concept: Two-Graph Editor - Logic vs Visual sync semantics
  • Concept: Compile Pipeline - how graphs become runtime data