Progression Tree Builder

v1.2.0

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. Handles weighted random skill selection and pool refresh mechanics.

Properties

PropertyTypeDescription
Node CountintNumber of skill panels (2-6)
Column SpacingfloatSpace between panels
Detail Panel PrefabGameObjectPrefab for skill panels
Auto Refresh On All MaxedboolRefresh when all visible skills maxed

Methods

RefreshPool(count) → void
GetCurrentPool() → List<ProgressionSkill>
SelectSkillFromPool(index) → void

Latest Mode Detail Panel

MonoBehaviour

Individual skill panel used in Latest mode. Displays skill details and handles unlock interaction.

Properties

PropertyTypeDescription
Skill IconImageUI Image for skill icon
Skill NameTextMeshProUGUISkill name display
DescriptionTextMeshProUGUISkill description
Cost DisplayTextMeshProUGUIPoint cost display
Unlock ButtonButtonButton to unlock skill

Methods

SetSkill(skill) → void
UpdateState() → void
OnUnlockClicked() → void

Layout Modes

ModeDescription
GridSkills in N columns, simple and clean
GraphVisual tree with connections showing dependencies
ListVertical list with filter/sort options
LatestRoguelike mode - shows random pool of skills

Skill Types

TypeExampleDescription
PassiveHealth BoostEffects are always active.
ActiveFireball SpellMust be activated manually. Use On Unlock Actions.
ChoiceWarrior vs MagePart of a Choice Group - only one can be chosen.

Stat Modifiers

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

Code Examples

Unlock Skill

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

// Unlock a 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}");
});

UI Widgets (Optional)

Optional UI components that enhance user experience by providing real-time progression feedback. All widgets use interface-based architecture for easy customization.

These widgets are completely optional. See the UI Widgets Guide for detailed setup and customization instructions.

Progression Notification System

MonoBehaviourWidget

Toast-style notification system that displays events in real-time. Automatically subscribes to progression events and queues multiple notifications.

Properties

PropertyTypeDescription
notificationPrefabGameObjectPrefab for notification toasts
maxQueueSizeintMaximum notifications in queue (default: 5)
displayDurationfloatSeconds each notification displays
fadeInDurationfloatFade-in animation time
fadeOutDurationfloatFade-out animation time

Interface

public interface IProgressionNotificationSystem : IProgressionUIWidget
{
    void ShowNotification(NotificationType type, string title, string message, Sprite icon = null);
    void SetQueueSize(int size);
    void ClearAll();
}

Supported Events

  • Skill Unlocked
  • Skill Upgraded
  • Points Awarded
  • Tree Unlocked

Skill Points HUD Widget

MonoBehaviourWidget

HUD element displaying available progression points. Can be clicked to open the tree UI. Features pulse effect on points gained and auto-refresh.

Properties

PropertyTypeDescription
pointsTextTextMeshProUGUIText field showing point count
iconImageImageIcon graphic
clickToOpenTreeboolEnable click to open tree UI (default: true)
pulseOnPointsGainedboolShow pulse effect on points awarded (default: true)
uiControllerProgressionTreeUIControllerOptional - auto-finds if not assigned

Interface

public interface IProgressionPointsDisplay : IProgressionUIWidget
{
    void UpdatePoints(ProgressionTree tree, int availablePoints);
    void SetTrackedTree(ProgressionTree tree);
    void SetClickable(bool clickable);
}

Methods

  • SetTrackedTree(tree) - Set which tree to display points for
  • UpdatePoints(tree, points) - Manually update display
  • Refresh() - Refresh from current tree data

Skill Unlock Animation Overlay

MonoBehaviourWidget

Fullscreen celebration overlay for skill unlocks. Automatically detects if tree UI is open and only displays when UI is closed to avoid visual clutter.

Properties

PropertyTypeDescription
overlayPanelGameObjectMain overlay container
skillIconImageSkill icon display
skillNameTextTextMeshProUGUISkill name display
autoDismissboolAuto-close after duration (default: true)
autoDismissDurationfloatSeconds before auto-dismiss (default: 3)
playOnUpgradeboolShow on rank upgrades (default: false)
uiControllerProgressionTreeUIControllerFor detecting tree UI state

Interface

public interface ISkillUnlockAnimation : IProgressionUIWidget
{
    void PlayUnlockAnimation(ProgressionSkill skill, int rank);
    void SetAutoDismiss(bool auto, float duration = 3f);
    bool IsPlaying();
}

Customization

  • Edit prefab to change panel size, colors, fonts
  • Add custom particle systems for celebration effects
  • Modify fade-in/out durations
  • Add sound effects via Game Creator Audio instructions

IProgressionUIWidget (Base Interface)

Interface

Base interface inherited by all UI widgets. Implement this to create custom progression widgets.

Interface

public interface IProgressionUIWidget
{
    // Called when widget should initialize
    void Initialize(ProgressionTreeManager manager);
    
    // Called when widget should clean up
    void Cleanup();
    
    // Check if widget is active
    bool IsActive { get; }
    
    // Enable/disable widget
    void SetActive(bool active);
}

Implementation Tips

  • Always null-check the manager reference
  • Subscribe to events in Initialize(), unsubscribe in Cleanup()
  • Use FindObjectOfType<ProgressionTreeManager>() if manager not provided
  • Gracefully handle missing references for drag-drop flexibility