Progression Tree Builder

v1.1.2

Component Reference

Complete reference for all components and Scriptable Objects in the system.

Overview

The Progression Tree Builder system consists of the following main components:

  • Progression Tree — Scriptable Object containing all skills
  • Progression Skill — Scriptable Object defining individual skills
  • Tree Manager — MonoBehaviour managing runtime state
  • Skill Instruction Manager — MonoBehaviour coordinating scene-based instructions
  • Skill Instructions — MonoBehaviour for per-skill scene-specific behavior
  • UI Controller — MonoBehaviour coordinating the display
  • Skill Node Renderer — Sub-controller for node creation and positioning
  • Connection Renderer — Sub-controller for visual connection lines
  • Tree Navigation Controller — Sub-controller for multi-tree navigation
  • Latest Mode Layout Controller — Specialized controller for roguelike progression
  • Latest Mode Detail Panel — Individual skill panel in Latest mode
  • IProgressionTreeReference — Interface for flexible tree references
  • ProgressionTreeReference — Wrapper class for tree asset references

Progression Tree

Scriptable Object

The main object that defines a complete skill tree.

Create via:

Create → Game Creator → Progression Tree Builder → Progression Tree

Properties

PropertyTypeDescription
Tree NamestringName of the tree displayed in the UI
DescriptionstringDescription of the tree
SkillsList<ProgressionSkill>All skills in this tree
Root SkillsList<ProgressionSkill>Skills without prerequisites
Allow RespecboolCan skills be reset?
Layout TypeenumVertical, Horizontal, Radial, or Free-form
Choice GroupsList<ChoiceGroup>Groups where only one skill can be chosen

Progression Skill

Scriptable Object

Defines a single skill or ability.

Create via:

Create → Game Creator → Progression Tree Builder → Progression Skill

Properties

PropertyTypeDescription
Skill NamestringDisplay name of the skill
DescriptionstringWhat does this skill do?
IconSpriteIcon for the UI
Skill TypeenumPassive, Active, or Choice
Max RankintMaximum level (1 = not upgradeable)
Base Skill Point CostintCost to unlock
Selection WeightintWeight for Latest mode (1-100, higher = more common)
Required SkillsList<ProgressionSkill>Skills that must be unlocked first
Stat ModifiersList<SkillStatModifier>Stats that are modified

Progression Tree Manager

MonoBehaviour

Manages the runtime state of all Progression Trees.

Properties

PropertyTypeDescription
Target CharacterGameObjectGameObject with Traits component
Available TreesList<TreeConfig>List of all available trees
Auto Unlock TreesboolUnlock all trees automatically?
Use Separate PointsboolEach tree has its own points vs. global

Methods

UnlockSkill(tree, skill) → bool
UpgradeSkill(tree, skill) → bool
GetSkillRank(tree, skill) → int
IsSkillUnlocked(tree, skill) → bool
GetAvailablePoints(tree) → int
RefreshLatestPool(tree, count) → void
GetCurrentLatestPool(tree) → List<ProgressionSkill>
RespecTree(tree) → bool

Skill Instruction Manager

MonoBehaviour

Central manager for all scene-based skill instructions. Automatically finds and executes SkillInstructions components when skills are triggered. Add this component to your ProgressionTreeManager GameObject.

Properties

PropertyTypeDescription
Auto Find On AwakeboolAutomatically find all SkillInstructions in scene on start
Search Children OnlyboolLimit search to children only (false = search entire scene)
Debug ModeboolLog when instructions are executed for debugging
Registered SkillsList<SkillInstructions>All found SkillInstructions components (read-only)

Methods

FindAllSkillInstructions() → void
GetSkillInstructions(skillId) → SkillInstructions
HasInstructions(skillId) → bool
ExecuteOnUnlocked(skillId, args) → void
ExecuteOnActivated(skillId, args) → void
ExecuteOnUpgrade(skillId, args) → void
RegisterSkill(skill) → void

Skill Instructions

MonoBehaviour

Scene-based instruction component that executes Game Creator Instructions for a specific skill. Supports GameObject drag & drop references and scene-specific behavior. Each skill can have multiple SkillInstructions components across different scenes.

Properties

PropertyTypeDescription
SkillProgressionSkillThe skill this component controls (required)
Use On UnlockedboolExecute instructions when skill is unlocked
On UnlockedInstructionListInstructions to run when unlocked
Use On ActivatedboolExecute instructions when skill is activated
On ActivatedInstructionListInstructions to run when activated
Use On UpgradeboolExecute instructions when skill ranks up
On UpgradeInstructionListInstructions to run on upgrade

Methods

GetSkillID() → string
GetSkillName() → string
GetSkill() → ProgressionSkill
ExecuteOnUnlocked(args) → Task
ExecuteOnActivated(args) → Task
ExecuteOnUpgrade(args) → Task
HasAnyInstructions() → bool
HasSkillAssigned() → bool

Progression Tree UI Controller

MonoBehaviour

Controls the entire UI display and user interaction.

Properties

PropertyTypeDescription
Layout ModeenumGrid, Graph, List, or Latest
Grid ColumnsintNumber of columns in Grid mode
Details Panel AlignmentenumPosition of the details popup
Latest Node CountintHow many skills to show in Latest mode (2-6)
Latest Column SpacingfloatSpace between panels in Latest mode
Auto Refresh On All MaxedboolRefresh pool when all skills are maxed
Column WidthfloatFixed width per column (0 = auto-fit)
PaddingfloatDistance to screen edges

Methods

OpenTree(tree) → void
CloseTree() → void
SwitchToTree(tree) → void
SelectSkill(skill) → void
RefreshUI() → void

Latest Mode Layout Controller

MonoBehaviour

Specialized controller for roguelike-style Latest mode with N detail panels side-by-side.

Properties

PropertyTypeDescription
Details ContainerRectTransformContainer for horizontal layout
Details Panel PrefabGameObjectPrefab with ProgressionDetailsUI component
Column SpacingfloatSpace between panels
Column WidthfloatWidth per panel (0 = auto-fit)

Methods

Initialize() → void
DisplayLatestPool(tree, skills) → void
RefreshDisplay() → void
AreAllNodesMaxed() → bool
ClearPanels() → void

Latest Mode Detail Panel

MonoBehaviour

Wrapper component for individual skill detail panels in Latest mode. Each panel shows full skill information and has its own unlock/upgrade button.

Properties

PropertyTypeDescription
Current SkillProgressionSkillThe skill displayed in this panel (read-only)

Methods

Initialize(tree, skill) → void
RefreshDisplay() → void

Layout Modes

Grid

Fixed grid layout with configurable columns

Best for: Traditional skill trees

Graph

Free-form positioning based on tree's layout type

Best for: Complex dependency visualization

List

Vertical list layout

Best for: Simple linear progression

Latest

Roguelike mode showing N random skills from pool

Best for: Roguelike/roguelite games, survivors-style

Latest Mode: See the Usage Guide for detailed setup instructions and examples.

Skill Types

Passive

Applied permanently. Effects are always active.

Example: +10 Health

Active

Must be activated manually. Use On Unlock Actions.

Example: Fireball Spell

Choice

Part of a Choice Group - only one can be chosen.

Example: Warrior vs Mage

Stat Modifier Types

TypeExampleDescription
Flat+10 HealthFixed value is added
Percentage+15% DamagePercentage bonus
Per Rank+5 per RankScales with skill rank

Code Examples

Unlock Skill Programmatically

// Get reference to Manager
var manager = ProgressionTreeManager.Instance;

// Unlock skill
bool success = manager.UnlockSkill(myTree, mySkill);

if (success)
{
    Debug.Log("Skill unlocked!");
}

Refresh Latest Pool

// Refresh pool with 3 new skills
manager.RefreshLatestPool(myTree, 3);

// Get current pool
var currentPool = manager.GetCurrentLatestPool(myTree);
Debug.Log($"Pool size: {currentPool.Count}");

Listen to Skill Events

// Subscribe to unlock events
manager.OnSkillUnlocked.AddListener((tree, skill) =>
{
    Debug.Log($"Unlocked: {skill.skillName}");
});

// Subscribe to upgrade events
manager.OnSkillUpgraded.AddListener((tree, skill, newRank) =>
{
    Debug.Log($"{skill.skillName} now rank {newRank}");
});