Menu System Pro V2 Documentation UE5
Menu System Pro V2 Documentation UE5
List of contents
Menu System Pro 2 - Documentation 2
Introduction 6
Foreword 6
Overview 6
Features 6
Included Menus 7
Concept 8
Getting started 10
Installation 10
Make it your own design 14
Change Menu & Play level 16
Setup your menu level 17
Setup your play level 20
Setup your player classes 21
Setup your existing Game Instance 23
Packaging your project 25
Customization 26
Menu System Config 26
Widget Style Data 27
Widget & Menu Designs 29
Special Menus 31
Loading Screen 31
Background 32
Footer 33
Decision Dialog 34
Credits 35
Customization Guides 36
Change Colors 36
Change Fonts 37
Remove Design Override 38
Change Widget Text 39
Set Custom Cursor 39
Edit Intro Images 41
Edit Intro Texts 42
Set Title Screen Version 43
Material Effects in Widgets 43
Menu System Pro 2
Made by Moonville
Create new menu 45
Integrate new menu 49
Add widget to menu 52
Modify existing menu 56
Hide existing widget 58
Customize widgets 60
Create your own widget 63
Modify Menu Transitions 71
How to use DLSS and FSR2 73
Show Game Over Screen 74
Enhanced Input Integration 76
Menu Input 76
Character Input 77
UE 5.3 and above 77
UE 5.2 and below 77
Setup Input Mapping Context 79
5.3 and above 79
5.2 and below 80
Key Bindings Menu 80
5.3 and above 81
5.2 and below 82
Rebinding Inputs 82
Input Icons 84
Save and Load Settings 85
General 85
JSON Settings File 85
Settings Data Assets 86
Value Conversion Mappings 88
Apply Methods 90
Custom Apply Classes 91
Access Settings in Blueprints 92
Access through Settings Manager 92
Access through Library Functions 94
Save Games 95
Save Game Manager 95
Save Game Object 96
Save Game Menu 96
Save Slot Widgets 97
Save Game Payload 97
Overview
Features
● Easy to use and easy to customize
● Clean separation of code and design for better updatability
● Designs can be changed without any code changes, with config data assets
● Advanced Design changes are easy to make in UMG widgets
● Modular Settings Manager for audio, display, gameplay, graphics, controls
● Menus & Widgets for all important settings a game needs (50+)
● Modular Savegame Manager with Save & Load Menu
● Enhanced Input System key rebinding with Keyboard & Gamepad support
● Ingame Pause Menu easy to combine with other game features e.g. an
Inventory Menu
● Online Multiplayer menus (Host/Join Game and Server Browser)
● Local Multiplayer (Press button to join menu, Character Selection)
● Animated Game Intro with changeable logos
● Animated Credits Roll with hold to skip functionality
● Customizable Loading Screens for each level
● Accessibility Settings (e.g. Color Deficiency)
● Menu Music and SFX included (easy to change)
● Polished Example Scene with Sample Character
● Example menus for Character Selection, Level Selection, Grid Navigation,
Smooth Menu Camera Switch and Input Guide
● Multi Language Support (English and German included)
● Uses Graphics Benchmark to determine optimal performance
● All settings are stored as JSON and can be modified in a packaged build
● Easy to save and load your custom settings
● Extensive documentation & great support
● Blueprint Only!
● Intro Menu
● Title Screen Menu
● Gameplay General Settings Menu
● Gameplay Multiplayer Settings Menu
● Audio General Settings Menu
● Audio Voice Chat Settings Menu
● Video Display Settings Menu
● Video Graphics Settings Menu
● Controls General Settings Menu
● Controls Key Bindings Settings Menu
● Singleplayer Menu
● Savegame Menu
● Ingame Menu
● Loading Screen
● Multiplayer Menu
● Host Online Game Menu
● Server Browser Menu
● Local Multiplayer Menu
● Design Showcase
● Character Selection Menu
● Grid Navigation Menu
● Input Guide Menu
● Level Selection Menu
● Menu Camera Switch Menu
● Credits
Concept
The images below show the core structure and classes of Menu System Pro.
The UI is based on Global Interactable User Widget, Interactable User Widget and
Interactable Menu Widget. All actual User Widgets and Menus inherit from these
three classes. The Interactable Menu Widget acts as a container for Interactable
User Widgets (OptionsPicker, Slider, Buttons etc.).
The Menu Level Game Mode (also Play Level Game Mode) is extended using the
Menu Game Mode Component for local multiplayer functionality.
The Sample Player Controller is extended with the Menu Controller Component
which houses essential code for interacting with the Menu System and also things like
setting up the Enhanced Input System.
Menu System Pro 2.0 for Unreal Engine 5: Quick Start Guide & Customization Intro
Menu System Pro 2.0 for Unreal Engine 5: Integration Guide for Game Framework
Classes
Installation
1. Open the Settings/Plugins Window in the top-right of the Editor
4. Add ‘Menu System Pro’ to your project using the Epic Games Launcher
If you are using a source build, we recommend that you refer to the note in the
Miscellaneous section for further guidance.
2.) Then go ahead and rename every file in this folder that ends with _Silence to
your own ending you chose before.
Tip: You can click on the Design folder and use the search with ‘_Silence’ to
find all occurrences
This makes sure your design is not overridden when we update the Silence
Design.
Note: This tells Menu System Pro what design config should be used
4.) Always create backups before updating (use source control like Perforce if
possible).
Note: If you don’t have multiplayer, you don’t have to change them.
1.) Add ‘BP_MenuSystemActor’ to your menu level by dragging & dropping it into
your level
Location: /Blueprints/Core/
2.) Select the ‘BP_MenuSystemActor’ in your level and enable ‘Level Is Main
Menu’
3.) Open World Settings in your level and change the Game Mode Override to
‘BP_MenuLevelGameMode’
4.) Optional Step: When a good view on the scene is needed you can place a
Cine Camera Actor in the level and select it on the ‘BP_MenuSystemActor’
like this
Location: /Blueprints/Core/
2.) Open World Settings in your level and change the Game Mode Override to
‘BP_PlayLevelGameMode’
Alternative: If you already have your own game mode you can implement
the ‘BP_MenuSystemGameModeComponent’ on it. It’s located at:
‘/Blueprints/GameFramework/’
If you also have custom Character and Player Controller classes see the
section below.
You can locate it by using the search function on the Add button in the
following manner:
By doing so, your player controller will be ready to use Menu System Pro.
2.) Now, to set up the Character class, you will need to add some code for
initialization, opening the menu, and accessing settings such as axis inversion
and sensitivity. Navigate to ‘/Blueprints/Player/’ and open the
‘BP_SampleCharacter’ Blueprint
After that your character should be able to open the Ingame Menu using the
specified Input Action. Make sure to use the Enhanced Input Actions for all
Inputs in your Character, otherwise the Input might not work at all.
5. Compare both your game instance and our game instance side-by-side and
ensure you have correctly connected all nodes
1. Go to Project Settings/Packaging
2. Expand the Packaging section
3. Select 'Localizations to Package' (e.g. German and English)
Note: Hovering over each parameter will provide you with a detailed explanation of
its effect.
Fonts and Colors correspond to the ones specified in the Menu System Config.
The following illustration provides an example of how the basic logic and design is
separated:
It is advised to only add changes and custom logic in the design classes. For
example through function overrides like demonstrated in the Slider here:
The design classes can be found in the ‘Menus’ and ‘Widgets’ folders located at
‘/ExampleContent/Designs/Design_%DesignName%/’.
Loading Screen
The loading screen can be triggered from any menu like this:
To make the Loading Screen show your custom text and graphics you will need to
create a level metadata asset. You can find examples here:
‘/ExampleContent/Designs/Design_%DesignName%/Levels/MetaData/’
When the metadata asset is created you can add it to the Menu System Config
here:
If you like to change the Loading Screen widget layout you can access it here:
‘/ExampleContent/Designs/Design_%DesignName%/Menus/LoadingScreen/WBP_Lo
adingScreenMenu_%DesignName%’
Background
The Background is always shown throughout the menus and can be changed to
show images, material effects or just a semi-transparent black background like we
did.
Make sure to check and modify the code on the Event Graph if needed.
Footer
The Footer can be dynamically created in a menu
If you like to change or add Input Actions, we advise you to create an own
InputMappingContext outside of our folder structure (to make it update proof).
It can also be used for acknowledgement dialogs (one button only; like ‘OK’).
A good implementation example can be found in this Blueprint at the bottom of the
Event Graph:
Credits
Menu System Pro also offers an auto scrolling credits menu which can be skipped by
holding any button for a specific amount of time
The content can be easily changed in String Table ST_Credits located at:
‘/ExampleContent/Text/Menu/ST_Credits’
If you want to alter the layout or hook up your own string table for better updatability
navigate to:
‘/ExampleContent/Designs/Design_%DesignName%/Menus/Special/WBP_Credits_%D
esignName%’
Change Colors
1. Navigate to /ExampleContent/Designs/Design_%DesignName%/Config/
2. Open DA_MenuSystemConfig_%DesignName%
3. Expand the Colors section and the Color Palette in it
These are all the colors used throughout the menu system at one place! We
have a function called OverrideWidgetStyleFromConfig every widget based
on Interactable User Widget or Interactable Menu Widget, that reads colors,
fonts etc. from the Config and sets them to the actual UI widgets (in Pre
Construct).
4. For this example we will change the Highlight color to blue
Change Fonts
1. Navigate to /ExampleContent/Designs/Design_%DesignName%/Config/
2. Open DA_MenuSystemConfig_%DesignName%
3. Expand the Fonts section and the Fonts Palette in it
Note: We do not recommend breaking the connection, as this will disconnect the
MenuSystemConfig from this widgets styling. Please only disconnect the override
function if you are certain that it is necessary for your particular use case.
You might have to remove the String Table binding by clicking on the flag.
5. It is recommended to use your own String Table and link it there. This will be
beneficial when doing localization.
You might have to remove the String Table binding by clicking on the flag
5. Hit Compile & Save
1. Navigate to /ExampleContent/Designs/Design_%DesignName%/Config/
2. Open DA_MenuSystemConfig_%DesignName%
3. Change the Displayed Game Version here
4. Hit Save
We added the possibility to add a highlight material to all classes derived from the
WBP_ButtonBase.
Another example for using material effects would be the Extras Menu background. It
has an animated cloudy background placed on its MainMenuBorder:
1. Navigate to
/ExampleContent/Designs/Design_Silence/Menus/Singleplayer/WBP_Singlepla
yerMenu_Silence
3. Adjust the design to your needs and all the widgets you might need
Make sure to only use widgets that are inherited from Interactable User
Widget in your menu. Otherwise the navigation won’t work!
1. Navigate to
/ExampleContent/Designs/Design_Silence/Menus/TitleScreen/WBP_TitleScreen
Menu_Silence
2. Add a new button for the navigation to your new menu
4. Add the following code to the event and select your new menu on the
‘OnTransitionToTargetMenu’ node
1. Add a new Options Picker (Silence design or others) to the menu or duplicate
an existing one
2. Edit the Options Name, Description and Image according to your needs
3. Add your options to the Options Array and set the Default Option Index
4. If you now hit save & compile, your widget should already look like this:
To understand the properties in detail, please refer to the section Settings Data
Assets
9. Now go back to the menu and plug it into your newly placed widget
10. When you save it the change will be reflected in the Settings Json File
11. Finally add it to the Menu System Config’s Settings Data array
Doing this will enable the Settings Manager to load the setting UI independent
12. Done! You can easily access this data in your Blueprint code. Read the
Access Settings in Blueprints section for more detailed information on that
topic.
1. Navigate to
/ExampleContent/Designs/Design_Silence/Menus/Settings/WBP_GameSetting
s_Silence
2. Locate the Dynamic Footer Setup on the Event Graph and add a new button
like this:
Duplicate an existing one and connect it to the Make Array node. The Player
Mappable Options Name comes from the Enhanced Input Mapping Context
located at: /Blueprints/Input/Menu/IMC_Menu
3. Move further to the right side on the graph and locate the
OnFooterBarMenuSetupComplete event
Note: The OnPressedExtra event was added to support button press (‘X’ key)
5. Hit Compile & Save
Example #1 - Remove the Extras Menu from the Title Screen Menu
1. Navigate to /ExampleContent/Designs/Design_Silence/Menus/TitleScreen/
2. Open WBP_TitleScreenMenu_Silence
3. Select the Extras Title Screen Button and set the Visibility to ‘Collapsed’
1. Navigate to /ExampleContent/Designs/Design_Silence/Menus/Ingame/
2. Open WBP_IngameMenuTabs_Silence
3. Select both, Documents and Inventory Large Tab Button and set the visibility
to ‘Collapsed’
7. Enjoy!
8. Note: To make it properly load and save please follow the Guide: Add widget
to menu
4. We changed the widget height and color for the inner text
Note: The colors selectable in the Style Data Asset correspond to the ones set
Menu System Pro 2
Made by Moonville
int the Menu System Config’s Color Palette
Refer to the section Widget Style Data for more detailed information.
2. Add widgets to the hierarchy and wrap them with a size box.
This widget represents a button that changes the color on the right side every
time it is pressed.
a. On the size box you can control the widgets height in the menu.
8. Now we would like to save that color so it’s loaded the next time we open up
the menu. For that create a new Settings Data asset like described in Add
9. Go back to your widget and set it by clicking on the root on the hierarchy
10. Implement the Save & Load functions through override like we learned
before.
11. Now your setting show save to the Menu System Config Json file
12. The Apply Button also turns on when the color is changed
1. Navigate to /ExampleContent/Designs/Design_Silence/Menus/Base/
2. Open WBP_MenuContainer_Silence.
3. In the Designer tab within the animation window you will see the animations
we provide and how they are done.
You can change them here (modify keyframes, timings or add other elements
etc.)
4. Then go to the Graph tab and open the Function
‘SetupTransitionAnimationMapping’ .
6. After that just create one in and out animations in the Designer tab and add
them to the array in the function mentioned above.
7. Now you should be able to select it in the Menu System Config and it should
be called when transitioning menus.
Please refer to the official AMD and Nvidia documentations regarding the setup and
functionality.
Nvidia DLSS:
https://www.unrealengine.com/marketplace/en-US/product/nvidia-dlss
1. Create a menu that will be called for the Game Over Screen. See Create new
menu for a menu creation guide.
Menu Input
The menu input is also handled using Enhanced Input. It has its own designated Input
Mapping Context and Input Actions. They can be seen and modified in the Menu
System Config:
If you want to add your own Player Bindable Input Config or Input Mapping Contexts
this is the right place to do so.
It contains one PBIC for KBM (Keyboard/Mouse) with its two IMCs and one PBIC for
Gamepad with also two IMCs.
Input Action:
Set the Setting Behavior on every binding to ‘Inherit Settings from Action’ in all of your
IMCs. Then make sure to set a unique name and display name in every Input Action
(e.g. IA_Jump -> Jump). This will be important for integrating the bindings in the key
bindings menu later on.
Also important:
● Input Mapping Contexts should not contain multiple bindings that point to the
same key/button
● Input Actions should not be re-used in multiple different Input Mapping
Contexts
The Key Binder is modular and can be provided with the parameters you learned
about before in the previous subchapter.
It is fully modular so you are able to remove existing or add more elements to
represent alternative bindings. In our example we used three bindings for each
action (Primary, Secondary, Gamepad). Remember to use the unique names you
have learned about before as the Mapping Name. The other parameters should be
pretty self-explanatory.
It is fully modular so you are able to remove existing or add more elements to
represent alternative bindings. In our example we used three bindings for each
action (Primary, Secondary, Gamepad). Remember to use the unique names you
have learned about before. The other parameters should be pretty self-explanatory.
Note; gamepad specific: Since UE5.3 it will not remove the binding on the found
duplicate, but swap it with the current one instead, due to limitations introduced by
EPIC.
On the other hand bindings in different contexts can have the same button mapped
to some action. This is useful to have the same button work differently when for
example driving a car.
Note: If you modify bindings in the Input Mapping Context, make sure to delete the
MenuSystemConfig.json so that the bindings are rebuilt correctly.
General
The menu system utilizes a Settings Manager that is linked to the Game Instance,
enabling it to manage read and write operations to the JSON settings file. Read the
Getting Started chapter for more information on the integration into your project.
By having the Settings Manager attached to the Game Instance, we gain the
advantage of accessing settings data throughout the entire game and being
independent of the user interface.
It contains all regular settings as well as key bindings that differ from the default
bindings within the Input Mapping Contexts. At the first start the Settings Manager will
create this file with the default values specified in the Settings Data Assets.
To change the file path you could edit the GetJSONConfigFilePath function in the
mentioned Blueprint Library.
You can access data from the JSON settings file anywhere in your Blueprint code.
Learn more about it in the ‘Get saved settings in Blueprints’ subchapter.
You will have to add all custom Settings Data Assets to make them recognizable by
the Settings Manager, so it will load those settings.
This handles the load and save of the settings value and also the
conversion/mapping from and to the widget display values.
1. General Properties
a. Unique Name = Field Name in the JSON config file
b. Apply Method = How it’s going to be applied (see Apply Methods)
Menu System Pro 2
Made by Moonville
c. Value Conversion = How the value is converted (explained below)
d. Data Type = String, Integer, Float or Boolean
2. A default value has to be specified for the chosen Data Type
a. In this case it’s 2.2 which is the default gamma value for UE
3. Since Value Conversion is set to ‘Normalize Float to Range’ the slider value
(50-150) will be converted to the range of 1.8 to 2.6.
4. According to the Apply Method ‘Execute Console Command’ we have set
the console command ‘gamma’ which is called with the converted value.
E.g. ‘gamma 2.2’
Apply Methods
The Settings Data Asset provides several apply methods that can be selected based
on specific requirements. The following is an explanation of how these methods work.
○ This method enables the calling of a blueprint class with custom logic
○ Learn more about it in the Custom Apply Classes subchapter
○ This method enables the calling of Unreals Game User Settings functions
○ It should offer all relevant functions that you might need
○ If you need to extend it though, you can find the code for it here:
’/Blueprints/Settings/BP_SettingsManager’ or build a Custom Apply
Class which is better in terms of updatability
● No Apply Method
○ Nothing is done when applying. The value is just saved to the JSON
config file
○ An example for this is the ‘DA_PlayerName’ Settings Data Asset
‘/Blueprints/Settings/CustomSettingsApplyClasses/BP_EnableSubtitlesApply’
The custom event ‘OnApply’ is provided by the parent class and will be called when
this setting is going to be applied. So make sure to implement it when building your
own Apply Class. You can then access the Settings Value by breaking the Value and
take the right type as selected in the Settings Data Asset.
We have implemented a variety of Custom Apply Classes, among which DLSS and
FSR2 stand out as the most complex ones:
All of our shipped settings widgets use a similar signature to access settings data:
Our approach checks for "dirty" menus, indicating changes that require saving, and
makes the apply button interactable.
That function just reads the settings from JSON by field name:
You can also call those Load functions directly in your code. But be aware to use
them in an efficient manner to not hurt your games performance.
The Save Game Manager is used in the Singleplayer Menu, Ingame Menu and Save
Game Menu to handle the save slots for saving and loading the game.
We integrated our example Save Game Object in it with basic variables to store
some information which is then being displayed on the Save Slot widgets. To learn
more about using your own Save Game Object, please refer to the next chapter.
It shows simple information about the level, play time, timestamp of save etc.
1. Add a new string variable to the settings manager to store the last loaded
level in the LoadGame function
This code can be improved by checking the last loaded save slot name variable
before using it (empty, valid etc.) and check if the Actor entered the volume is
actually the player character. You could also show a save game indicator UI on
screen to show the user that a save has been triggered.
1. Open your Custom Savegame Object class and add a new variable of type
Transform
4. Open your Player Character blueprint on Event Possessed (Client) add the
following code:
If you now save anywhere in your level, your character’s transform is saved to the
Custom Savegame Object. When your level loads and the Player Controller takes
control of the Player Character it will call the Event Possessed, which in turn will call
the new load transform logic. The code in the player character ensures that the
Transform is only used when it is different from the Zero/Default value of a transform,
so it’s important not to skip that part.
Online Multiplayer
We've implemented online multiplayer using the Unreal Engine's Online Subsystem,
and have developed multiple menus specifically for this mode. Refer to the Unreal
Engine Documentation for more information about the Online Subsystem:
https://docs.unrealengine.com/5.0/en-US/online-subsystem-in-unreal-engine/
General
We use the Online Subsystem Null which is the default subsystem in Unreal Engine. If
you need to change it to for example to the Steam Online Subsystem you will need
to change it like explained in the official documentation.
If you use plugins like Advanced Sessions you will need to replace or modify a few
nodes explained in the chapter Modification Notes.
● Server Browser
Modification Notes
● Local multiplayer menu (max. Player Count)
This node creates four local player controllers. As soon as they have been
added four gamepads can be used in the menu.
When the menu is exited, the local player controllers are removed except for
the first one.
You can also use this node for your custom logic to remove local players.
5. Make sure you have a game target named ‘MenuSystemPro’. If not, create one.
6. Setup the game target like this (add path for the string tables there!)
11. Refer to the Unreal Engine Documentation (linked above) for further steps
regarding the translation process.
Linking texts to a string table
1. To link any text in the UMG editor to the text in the string table, simply click the
dropdown next to the input field and choose the string table and text key
2. Navigate to
‘/ExampleContent/Designs/Design_%DesignName%/Menus/Settings/’ and open
WBP_GameSettings_%DesignName%
3. Extend the the OptionsArray of the LanguageOptionsPicker
a. You have to add the language codes like when hovering over Cultures in
the Localization Dashboard
4. Also add the new language key to the Language Settings Data Asset located at:
‘/Blueprints/Settings/SettingsData/DA_GameLanguage’
5. Language Names are dynamically loaded during runtime and in the correct
language
Version 2.0.0
● Initial Release
● Released for Unreal Version: 5.0
Version 2.0.1
● New Graphics Settings
○ Global Illumination Method
○ Reflection Method (replaces SSR on/off)
● Created new Settings Data Assets and added them to MenuSystemConfig
○ DA_GlobaIlluminationMethod
○ DA_ReflectionMethod (previously DA_EnableScreenSpaceReflections)
● Added new strings to ST_Menu for the new settings
● New Feature:
○ Auto Save Game Trigger Volume
○ Multi Line Text Input Widget
○ Nvidia DLSS 3
○ FSR2 2.2.1
● Bug fix:
○ Fixed various issues related to Always Pause in Ingame Menu (Timer and
Delays) that caused problems with audio sliders etc.
○ Footer Button click fired twice
○ Loading Screen image was stretched
○ Updated unlocked frame rate command
○ Combobox now selects the right item on first selection
○ Continue now selects the latest save game
○ OnPossessed in character is now called for every client
○ Prevented cursor flashing when opening the ingame menu via
gamepad
○ Menu transition can now be set to None without destroying the
backwards navigation
● Adjusted some error messages and names (BP_MenuSystemActor etc.)
● Released for Unreal Version: 5.0
Version 2.0.2
● DLSS is now controlled by Resolution Scale (50 = ultra performance, 100 =
DLAA)
● Resolution Scale is now ranged to 50-100 and set via console command
● Released for Unreal Version: 5.1
Version 2.0.3
● Bug fix: Restored slider value text to visible size (Scale Box)
● Released for Unreal Version: 5.2
Menu System Pro 2
Made by Moonville
Version 2.0.4
● Bug fix:
○ Save Game Menu: Focus ‘None’ error when no save game exists
○ Back navigation cooldown issue when the same menu is opened again
○ GridButton text was not visible
○ Input bindings reset required a restart to work
● Released for Unreal Version: 5.0
Version 2.0.5
● Bug fix:
○ Save Game Menu: Focus ‘None’ error when no save game exists
○ Back navigation cooldown issue when the same menu is opened again
○ GridButton text was not visible
○ Input bindings reset required a restart to work
● Released for Unreal Version: 5.1
Version 2.0.6
● Bug fix:
○ Save Game Menu: Focus ‘None’ error when no save game exists
○ Back navigation cooldown issue when the same menu is opened again
○ GridButton text was not visible
○ Input bindings reset required a restart to work
● Released for Unreal Version: 5.2
Version 2.0.8
● Added Menu Container Add Finished event
● Added Menu Transition Finished event
● Improved Integration for other Moonville assets
● Released for Unreal Version: 5.1
● Release Date: 21st Nov 2023
● Changed Files and Upgrade Guide
Version 2.0.9
● Added Menu Container Add Finished event
● Added Menu Transition Finished event
● Improved Integration for other Moonville assets
● Released for Unreal Version: 5.2
● Release Date: 21st Nov 2023
● Changed Files and Upgrade Guide