Unlock System #
Videos #
This video shows how the system works and includes most core use cases and questions we get for this system:
Also good to know, most would like to integrate this system with the ability system and or level manager within a project like MST Pro. Check out this video on how to:
Specific Migration instructions #
We have basic migration and integration steps which is applicable and basically the same for each system. However, here are some extra notes on how you could migrate the unlock system.
Navigate to your player controller class assigned to your game mode and migrate that one to your project.

Add component “AC_Level_Manager_Basic” or depending on other system you may have “AC_Level_Manager_Advanced”

Finally add “AC_UnlockSystem_Advanced”.
Please note: You must add AC_UnlockSystem_Advanced last if using ability system or level manager, otherwise it will have initialization issues.

Overview of the Unlock system #
The unlock system is basically a crafting tree, tech tree, or unlock tree. However you would like to call it. It can be used for recipes, ability unlocks, tech unlocks, skill trees, and whatever else you can logically think of.

On opening the recipes tab, you will see a hierarchy of unlockables. On the far left you can see numbers 1, 2, 3, 4. These are the level requirements your character has to be at, to be able to unlock each recipe. The top right – underneath unlock points, displays how many unlock points you have. In the bottom right corner, next to the unlock button, displays how many points are required to unlock the recipe.
Core Data #

The core to the system runs through a data table called “DT_Unlockables”, above shows the file path you can take to access the data table.

When inside the data table, you will see that it is using the struct “Struct_UnlockableInfo”.
DT_Unlockables Struct Explained #
Unlockable Tag
- Type: Gameplay Tag
- Purpose: A unique identifier for this unlockable item or feature.
- Example: Items.Resource.Ingot.Steel_Ingot
- Usage: Used by systems to check if the player has unlocked something. It’s the primary reference key — think of it as an “ID.”
Is Unlocked by Default
- Type: Boolean (checkbox)
- Purpose: Determines whether this item starts unlocked when the game begins or when a new save starts.
- Usage:
- Checked → The player already has access to it (no unlock requirement).
- Unchecked → The player must meet requirements (level, quest, etc.) to unlock it.
Level Required
- Type: Integer
- Purpose: Sets the minimum player or character level required to unlock this.
- Usage:
- Example: “Level Required = 2” means the player must reach Level 2 to unlock it.
- Often used in skill trees, crafting unlocks, or ability progressions.
🔹 Required Unlockable Points
- Type: Integer
- Purpose: How many unlock points (or skill points, progression tokens, etc.) the player must spend to unlock it.
- Usage:
- Example: “Required Unlockable Points = 1” means it costs one point to unlock.
- Used in systems where unlocks are purchased or chosen via player progression.
🔹 Required Quests
- Type: Array or single Quest reference (Dropdown)
- Purpose: Lists any quests that must be completed before this item can be unlocked.
- Usage:
- Example: You might require completing “Quest_SmeltingBasics” before unlocking “Steel Ingot.”
- If empty, there’s no quest requirement.
🔹 Required Unlockables
- Type: Array or single Gameplay Tag reference
- Purpose: Lists other unlockables that must already be unlocked before this one becomes available.
- Usage:
- Example: You might need to unlock “Iron Ingot” before unlocking “Steel Ingot.”
- Supports dependency chains (tech trees, progression paths).
Unlockable Categorisation Tags
- Type: Gameplay Tag Container
- Purpose: Tags that define what category this unlockable belongs to (for UI filtering, sorting, or grouping).
- Usage:
- Example: Items. might group this under the item unlock tree.
- Other examples: Abilities., Buildings., Crafting., etc.
- Useful for showing only certain categories in menus.
Hide in UI When Locked
- Type: Boolean
- Purpose: Determines whether this item should appear in menus or UI before it’s unlocked.
- Usage:
- Checked It’s hidden from players until they unlock it.
- Unchecked It’s visible but grayed out or marked as locked.
- Often used to avoid spoiling unrevealed progression paths.
Adding unlockable categories tab to the UI Topbar in the menu #

Navigate back to your controller and click on the AC_UnlockSystem_Advanced.

Locate Topbar Menu Widget then click add element under widget categories. I will use the example category: Ability.

To add your new unlockable hierarchy to the UI, scroll down and locate TopBar Menu Widget, and add an array. Select the key to match the gameplay tag category you previously created. For the same UI that the system provides, select the widget to be UI_AutoGeneratedUnlocksPanel.

Topbar Text will change the name on the ingame top bar. Index chooses where the tab should be in the topbar. So if I selected “Index : 3”, the menu would show “recipes” “system” “ability (example)” – in that order.

Currently, you can see that the ABILITY (EXAMPLE) does not contain anything in the hierarchy. This is because in DT_Unlockables, there are no unlockables using the ability tag. So as an example I will change the ingot to contain the tag “ability”.

It has no auto generated, due to the widget you selected – over to the ability tree.

It has also been removed from the recipe tab.

Hide from UI when unlocked #
The purpose of this boolean is so unlockables can’t be unlocked through purchasing with unlock points. It is used so that the player can only unlock a specific unlockable through actions you define.
Below is an example of how you can use events to unlock specific entries in the data table.

