Ultimate Progression Framework System
v1.0.0
Complete Upgrade ScriptableObject Inspector
The Upgrade Inspector organizes the complete progression workflow into six focused sections.
Before you begin

The progression model

UPFS organizes progression into Big Upgrade groups containing sequential Small Upgrades.

A Small Upgrade represents one purchasable or unlockable progression step. It stores a level, gameplay value, price and completion state.

A Big Upgrade groups related Small Upgrades into a milestone. Groups make long progressions easier to author, display and react to without changing the sequential runtime model.

ElementPurposeExample
Upgrade SOOwns the complete progressionWeapon Power
Big UpgradeGroups a progression milestoneSteel Tier
Small UpgradeRepresents one sequential stepLevel 4 → Level 5

Create an Upgrade asset

Create the main progression asset directly from Unity's Project window.

  1. 01
    Open the Create menu

    Right-click inside the Project window.

  2. 02
    Choose the UPFS asset

    Select Bcyly Labs › Ultimate Progression Framework › Upgrade.

  3. 03
    Name the asset

    Use a stable, descriptive name such as WeaponPower_Upgrade.

  4. 04
    Configure the structure

    Open Upgrade Settings, then use Auto Generate Data or build the list manually.

Inspector section

1. Upgrade Settings

Defines the identity, group structure and Big Upgrade milestone trigger behavior.

Upgrade Name identifies the progression at runtime and is currently used as part of its PlayerPrefs save key. Small Upgrades Per Big Upgrade establishes the default group size used by the data generator.

Big Upgrade Trigger Mode determines whether a Big Upgrade event is raised when a group begins or when its final Small Upgrade is completed.

Upgrade Settings section
Upgrade Settings controls progression identity, default group size and milestone timing.
ControlPurposeGuidance
Upgrade NameHuman-readable progression identity and save-key inputKeep it unique and avoid renaming after release
Small Upgrades Per Big UpgradeDefault number of steps in each generated groupChoose a size that matches the intended milestone rhythm
On First Small UpgradeRaises the Big Upgrade event when a group startsUseful for entering a new tier
On Last Small UpgradeRaises the Big Upgrade event when a group completesUseful for milestone rewards
Inspector section

2. Base Values

Defines the state returned before the first standard upgrade has been completed.

Base Values provide the starting level, gameplay value and price when the progression has no purchased Small Upgrade. This makes the current-state API useful from the first frame.

When Consider First Upgrade As Base Value is enabled, the first Small Upgrade is silently marked as the base state. Gameplay events are not fired for this automatic initialization.

Upgrade Base Values section
Base Values establish the authored starting state before normal progression begins.

Separate base values

Use the dedicated Base Values fields when level zero or an unpurchased state exists outside the generated upgrade list.

First upgrade as base

Use the first generated entry as the initial state when every meaningful state should live inside one continuous list.

Inspector section

3. Auto Generate Data

Builds a complete progression from structure, value, price and distribution settings.

The generator is the fastest way to author consistent upgrade data. Define the number of groups and steps, then choose start/end ranges for gameplay values and prices.

Value and price distributions are independent. A progression can use smooth value growth with aggressive exponential cost scaling, or any other supported pairing.

Auto Generate Data section
The generator creates nested upgrade data and applies independent value and price distributions.
DistributionBehaviorTypical use
LinearEven change from start to endPredictable level progression
Exponential / Ease InSlower early, faster late growthLong-term price scaling
Logarithmic / Ease OutFast early gains that gradually flattenEarly player acceleration
Ease In OutSmooth S-curveBalanced middle-focused progression
RandomValue selected from configured boundsAuthored variation
StepKeeps the starting valueFlat values with separate cost growth
Custom CurveEvaluates an AnimationCurveFully authored progression shape
Inspector section

4. Current Upgrade

Displays and tests the live progression state without searching through nested data.

Current Upgrade provides an immediate view of the active level, value and progression status. It is useful while balancing data and while testing persistence in Play Mode.

The runtime API exposes the same state through GetCurrentUpgrade, GetNextUpgrade, GetOverallUpgradeProgress and GetCurrentBigUpgradeProgress.

Current Upgrade section
Current Upgrade summarizes active data and normalized progression at a glance.
  • Current Small Upgrade level and gameplay value
  • Next available upgrade and cost
  • Progress inside the active Big Upgrade group
  • Overall progress across the complete asset
  • Fully upgraded state
Inspector section

5. Big Upgrades

Provides direct control over every group and individual progression step.

Each Big Upgrade contains a name and a nested list of Small Upgrades. Each Small Upgrade stores completion state, level, value and the native upgrade price.

Use this section to review generated data, fine-tune individual entries, add special milestone values or manually construct a progression that does not follow one mathematical curve.

Big Upgrades list section
Big Upgrades exposes the complete nested progression with focused add, edit and delete controls.
Small Upgrade fieldRuntime meaning
Is UpgradedWhether this step has been completed
Upgrade LevelLevel identifier presented to gameplay and UI
Upgrade ValueGameplay value associated with this state
Upgrade PriceNative single-price value stored by Upgrade SO
Inspector section

6. Save & Data

Controls PlayerPrefs persistence, loading, resets and development-time data actions.

Upgrade SO serializes its Big Upgrade data to JSON and stores it in PlayerPrefs. PerformUpgrade automatically saves after a successful progression step.

Load restores the saved structure and completion state. Reset deletes the asset's save key, clears completed states and reapplies the first entry when it is configured as the base value.

Upgrade Save and Data section
Save & Data provides explicit development controls around the automatic persistence lifecycle.
Action / SettingResult
SaveWrites current Big Upgrade data to PlayerPrefs
LoadReplaces runtime data with the stored JSON data
Reset SaveDeletes the key and clears completion state
Reset on PlayerPrefs ClearedClears progression when no save key is found

Runtime upgrade flow

One successful PerformUpgrade call updates state, raises events and saves the progression.

  1. 01
    Find next step

    UPFS scans Big Upgrades in order and selects the first incomplete Small Upgrade.

  2. 02
    Complete state

    The selected Small Upgrade is marked as upgraded.

  3. 03
    Build event context

    Detailed data includes Small and Big Upgrade references plus local and global indices.

  4. 04
    Raise events

    Any Upgrade and detailed events fire, followed by the configured Small or Big milestone event.

  5. 05
    Check completion

    The Fully Upgraded event fires when no next entry remains.

  6. 06
    Persist

    The updated data is saved to PlayerPrefs.

csharp
public class WeaponUpgradeController : MonoBehaviour
{
    [SerializeField] private Upgrade weaponPower;

    public void UpgradePower()
    {
        if (!weaponPower.IsFullyUpgraded())
            weaponPower.PerformUpgrade();
    }
}

Essential Upgrade API

The most commonly used runtime calls for reading and advancing progression.

MemberReturnsPurpose
PerformUpgrade()boolCompletes the next sequential Small Upgrade
GetCurrentUpgrade()SmallUpgradeReturns the current state or base values
GetNextUpgrade()SmallUpgradeReturns the next incomplete step
GetSmallUpgradeByIndex(index)SmallUpgradeReads an entry by zero-based global index
GetUpgradedSmallCount()intReturns the sequential completed count
GetOverallUpgradeProgress()floatReturns normalized total progress
IsFullyUpgraded()boolChecks whether all entries are complete