1.6.1 Manual Quality Game Settings
1.6.1 Manual Quality Game Settings
Manual v1.6.1
(Unreal 4.14 - 4.17)
Thank you for buying this asset
1 Features:
Quality Game Settings is a settings menu ready to be included in your Unreal 4 games.
It includes:
● Keybindings with remapping
○ Detects conflicts
○ Generates UMG from data table
○ Allows key combinations
○ Remapping buttons to axis directions and axis to buttons
○ Read keybinding to make strings like “Press [key] to jump”
● Audio control on sound classes
● Control Video Quality and Screen Mode:
○ Resolution - Fullscreen / Windowed
○ Motion blur
○ Field of View
○ Anti aliasing
○ Shadow Quality
○ Brightness / Gamma / Bloom
○ V-Sync
○ ++
● Mouse sensitivity with invert axis options
● Custom game tab for your own options
○ Includes example components
● Development tab to add settings to help during development
○ Dev tab is hidden when game is packaged for shipping
● Grab top bar and move menu
● Settings saved on disk and re-applied on game start
○ If no save file exists, a new one is made using default values in GameSettings
and DefaultGameUserSettings.ini
○ Supports level change
● An example level demonstrating use of settings menu
● A barebones main menu containing a settings menu, (provided as an example)
● Plenty of other smaller features, try it out the demo.
For feedback and help: please use QualityGameSettings thread on unreal forums.
https://forums.unrealengine.com/showthread.php?67933-Quality-Game-Settings-Menu-a-goo
d-looking-UI-ready-for-use
For other questions, please use unrealquality@gmail.com
1
2 Index:
1 Features:
2 Index:
7 Customize Menu
7.1 Hide Games Tab or other settings
7.2 Reorder Game Tab
7.3 Change Color
7.4 Change Textures
7.5 Change Default Values
7.6 Change Default Keybindings
7.7 Change Look of Buttons and Components
7.8 Implement settings in a main menu
7.9 Reorder Keybinding List
7.10 Add new console command settings
8 Problem solving
8.1 Settings not applied on game start
8.2 Screen Capture 2D actor bug
2
8.3 Why is it hexadecimal numbers on AudioUpdateStruct node?
8.4 UMG/Widget components volume control
8.5 Virtual Reality support?
8.6 Dual monitors
8.7 Packaged game crashes/Settings are not applied correctly
8.8 Delete ExampleRoom folder crashes unreal
8.9 Where is the save file stored?
8.10 Issues on Mac/OSX
8.11 Brightness(Gain)/Gamma/Bloom/Field Of view does not work
8.12 Editor Crashes when pressing play
8.13 Particles stops working when changing quality level (Detail Mode)
8.14 How to play sound when game is paused
8.15 Black Screen when changing view distance.
8.16 Unable to remap keys in game.
8.17 Dev tab does not hide itself when game is packaged.
8.18 Unable to click or interact with settings/HUD is overlapping settings
8.19 Play in Editor (PIE) flickers/slowly expands
8.20 Multiple Assets requires re-save on play/Editor slow to start game
8.21 Can’t rebind keys if game is paused
8.22 Can’t save blueprint
8.23 Custom list of video resolution
8.23 Foliage density is not working.
8.24 Nativizing Blueprints not compiling.
8.25 Forward shading rendering
8.26 Fullscreen in editor behaves oddly
8.27 Menu shifts/shears/moves when clicking tabs
8.28 Third person movement not working as expected
9 Other Features
9.1 GameUserSettings ini file
9.2 Development options
9.3 Find and Display Keybinding
9.4 Optimization
9.5 Fine Tune Quality Levels
9.5 Access input in other blueprints.
10 Version Changelog
11 Credits
3
3 How to implement Quality Game Settings
This guide assumes that you have played with blueprints in Unreal 4.
If you are new to blueprints, please watch some tutorials on youtube.
Download Quality Game Settings (Has to be same Unreal version as your project).
Open the project and in the content browser, right click QualityMenu to Migrate the folder.
A new window will show up, displaying all assets ready for transfer.
Click OK and find the location of your new project.
4
Select the content folder inside your first person project and press OK.
Now you can close QualityGameSettings project and go back to the first person project.
Inside the first person project content browser, you now have a folder containing all Quality
Game Settings files.
QualityMenu folder includes the ExampleRoom folder. If you don’t need it, you can delete it.
(Unreal Editor sometimes crashes due to large number of assets being deleted, you can
close the project and safely delete ExampleRoom folder from your normal file browser
instead)
5
3.2 Set the Game Instance
Unreal 4 has a special game instance class that starts when game is running.
It will be used to create a Game Settings object before other blueprints.
(If you want to use your own game instance instead, see part 6 of this manual)
Close project settings and go back to main window of first person project.
6
3.3 Clean up Character Blueprint
As of quality menu release 1.6, the control logic has been moved from character blueprint to
a Player Controller (PC) blueprint. This allows support for online multiplayer. You are free to
copy and use the included “BP_PlayerControllerWithSettings” as a base, but the following
tutorial remakes the Player Controller from scratch to help you understand how it works.
For simplicity of this manual, we will ignore networking until part 3.12, where we will add
some nodes if your project will be used over network.
Delete almost every node except the bottom spawn projectile part, we will reuse that later.
7
3.4 Create a Player Controller
Go back to content browser and create a new blueprint.
Make it a Player Controller, this will be the brain of our character and manage input.
Name it “BP_FirstPersonPC” where PC stands for Player Controller.
Open up “BP_FirstPersonPC”.
From event begin play, drag out a new node and search for “Get Game Settings”
8
Right click and empty spot and search for “Get Game Instance” node. Connect it to the ““Get
Game Settings", this will fetch settings from game instance we set up in part 3.2 in manual.
This is an easy way to fetch the game settings object from almost any blueprint.
9
Set modifier class to be “BP_SettingsCameraModifier”. Be aware that this will disable any
other post process effects in scene that changes brightness/gamma/bloom intensity/FOV. If
you want to interact with these effects, you should configure BP_SettingsCameraModifier.
(See manual part 8.11 for more)
Set the Player Controller class to be BP_FirstPersonPC, when you start up the game now,
the player will be using this Player Controller, and possess the default pawn class
10
3.7 Add Action Manager
With Quality Game Settings 1.5 release, a keybinding system was added. It requires a few
steps to get it up and running.
Go back to your Player Controller blueprint (Not FirstPersonCharacter) and click “Add
Component”. Search for action manager and add it to the components list.
Search for nodes “InputAxis Update Keybinding” and “Tick Action Manager”. Connect them
together. This will update action manager at the same time as unreals own keybinding
system. (This makes input more responsive than any other Event tick groups).
11
Create an “Any Key” node. Make sure it executes when paused, and does not consume
input.
(If you forget to set it to execute when paused, system cannot remap keys if game is
paused.)
Connect “Any Key Press” from action manager to the “Any Key” node.
(This setup registers new keybindings if player is remapping keys).
Now right click BP_ActionManager in component lists and begin to add relevant events. We
don’t have “Fire Gun” action event yet. It will be created when we modify action manager.
12
Begin with adding camera control. Since we are making a blueprint in a “Player Controller”,
we need to get the pawn our controller has possessed. We want the character, but since a
character blueprint is subclass of pawn, we use “Get Controlled Pawn”. Connect “LookUp”
and “LookRight” events to “Add Controller Pitch Input” and “Add Controller Yaw Input”
To properly use “Add Movement Input”, we also get actor forward and right vector to move in
the direction our character is facing.
13
A pawn don’t have the function “Jump”, but since we will be using a character, we can cast
our pawn into a character to access the jump function.
This is it for basic movement, we will add a way to fire gun later.
Connect it to the “Event BeginPlay” sequence, after adding camera modifier. Promote the
widget return value into “Settings Menu” so we have a reference.
(Here you can set game to pause when setting menu is open)
14
Add the settings menu to viewport. If you have a custom HUD, make sure the ZOrder
between them is correct, the widget with the highest ZOrder will be on top of a lower one.
On “MenuPressed”, we want the menu open if it’s closed, and close it if it’s open. Use a
branch node and check with our settings menu reference “Is Menu Open” to toggle menu.
You can now Play Game and see if Action Manager works, and menu opens with E key.
15
In the data table, press the + button to add a new row.
16
Expand Combinations elements and set primary input to “Left Mouse Button”, and secondary
input to “Right Trigger on Gamepad”.
(UseNegativeAxis is relevant if we want to use the negative values of an axis for input. For
example: “Mouse Y” value can be positive or negative when mouse moves up or down.)
You can move the PewPew action up the rows. This affects the order it is displayed in menu.
The new keybinding will now show up in menu with the Category displayed above.
Now it’s time to add the fire gun event dispatcher to Action Manager.
Open up BP_ActionManager blueprint by double clicking it.
(Advice: Modifying BP_ActionManager has a risk of confusing editor unless compiled
before save. Press compile and save action manager before playing to avoid errors)
17
Inside the action manager, you see all the other actions set up. Get the new PewPew action
and promote it to a variable.
Use the “Action State” macro to check on our PewPew action and call FirePressed event
when PewPew “Was Pressed”.
Compile and save BP_ActionManager. (Unreal can sometimes be a bit confused after
changing event dispatchers in action manager, so compile and save)
Open up our player controller BP_FirstPersonCharacter and add the new FirePressed event
from action manager.
18
This time we cast the controlled pawn into our “FirstPersonCharacter”, since it is the
character that will fire the gun. But our character does not have an event to fire the gun yet,
so we have to make one.
Open up “FirstPersonCharacter” blueprint. We removed most of the nodes in part 3.3 of the
manual, but we kept the gun fire part to be reused. Delete the old InputAction Fire and
InputTouch.
Connect it to Montage Play to reuse the blueprint sequence. Compile and save blueprint.
19
Now we can go back to BP_FirstPersonPC and call our new “Fire Gun” event.
Compile and save Player Controller to avoid issues after modifying action manager.
Open it up and set its sound Class to SC_Effect. That is it, menu can now control the audio
file. See part 4 of manual for more information on sound classes.
Navigate to your project's config folder and create a new file DefaultGameUserSettings.ini
20
Copy paste these settings into the new .ini file
[ScalabilityGroups]
sg.ResolutionQuality=100.000000
sg.AntiAliasingQuality=2
sg.ShadowQuality=2
sg.PostProcessQuality=2
sg.TextureQuality=2
sg.EffectsQuality=2
sg.FoliageQuality=2
[/Script/Engine.GameUserSettings]
bUseVSync=False
WindowPosX=-1
WindowPosY=-1
bUseDesktopResolutionForFullscreen=False
FullscreenMode=1 ; Fullscreen=0, Windowed Fullscreen=1, Windowed = 2
LastConfirmedFullscreenMode=1
PreferredFullscreenMode=1
Version=5
AudioQualityLevel=0
FrameRateLimit=0.000000
DesiredScreenWidth=1920
DesiredScreenHeight=1080
LastRecommendedScreenWidth=0.000000
LastRecommendedScreenHeight=0.000000
; ResolutionSizeX=1920 ; Disabled so engine uses default resolution
; ResolutionSizeY=1080 ; Disabled so engine uses default resolution
You will notice these settings does not affect your game when you play in editor, but it will
work when you package it as development build or shipping build.
Gratulation, settings menu has been added to the FirstPerson blueprint project.
21
3.12 Add Network Support
If your game does not use network, you can skip this part.
I recommend reading this excellent tutorial by eXi to see how Unreal manages network.
http://cedric-neukirchen.net/2017/02/14/multiplayer-network-compendium/
The following simply gloss over why nodes are added to make it work over network without
throwing errors. If you are serious in making a network game (It is difficult!), I presume you
have worked enough with blueprint to follow along the next steps.
When playing over network, a client only knows about it’s own playercontroller and has no
information about other clients playercontrollers. Only the server has a list of all player
controllers.
In BP_FirstPersonPC, a Branch is added right after “Event BeginPlay” that evaluates if it’s a
Local Player Controller. Player Controller in Event BeginPlay runs once on client and multiple
times on server on every Player Controller connected. We only want to add menu widget on
a client so Server does not attempt to make the widgets. Server does not need to spawn
widgets, and a dedicated server can’t spawn widgets anyway.
Now we need to check if our Player Controller is controlling a pawn. When a client joins a
server, it takes a moment for the server give client a pawn to possess. During that time, the
action manager will attempts to update movement on a character, but since no
character/pawn is given yet, an error message is throw. A macro is made to validate if we
have a pawn.
22
Add this macro after every event dispatcher that sends input to the pawn/character. Do this
with MoveForward, MoveRight, LookUp, LookRight, JumpPressed, FirePressed. You don’t
have to add it after “Menu Pressed” since the widget is made as a part of player controller.
To fire a gun, we have to tell the server that the client fired the gun. Make an event “Server
Fire Gun” that replicates to “Run On Server”, it takes an input Location and Rotation that will
spawn a bullet at that position. This is really bad since a player can now cheat and spawn
bullets anywhere in map. It is only used as an example to keep this manual simple.
Create another event “Gun Was Fired” that multicasts that a player has fired a gun. The
server calls this to notify clients and make them play animation and sound.
23
This is the full overview, where client tells server that it fired a gun from a location/rotation,
the server spawns a bullet projectile, and then tells all connected clients that player has fired
a gun so they see the animation and hear the sound.
The bullet projectile itself does spawn on server, but it is not replicated to other actors. Open
up “FirstPersonProjectile” for the bullet blueprint and find “Class Defaults”.
24
Tick off the box that makes sure actor “Replicates”
You can now launch game in multiplayer without error messages. Again, be aware that this
was only to “Make it work” and it does not take into consideration cheat protection, client
replication, latency reduction and so on. I kindly ask you to not send me questions related to
networking or network errors. Only do so if you are very sure the problem is in the settings
menu, and not your blueprints.
I wish I could say good luck with your network game, but what you will need is a good bunch
of hard work, lots of reading, trial and error, and understanding. Godspeed.
25
4 Add sound classes to audio assets
A new node was added in 4.12, allowing volume control of sound classes.
Quality Game Settings 1.6 now uses this method of controlling volume instead.
The old system is still included under “QualityMenu/Bluprints/Util/OldAudioSystem”, but it will
be removed in a future release.
SC_Effect Shots, enemy pain, bonfire, audio character can move away from
SC_Ambient Wind blowing, birds singing, audio character can’t move away from
SC_Master Master Volume affects the other sound channels, an audio should
not be controlled by master, but by one of the other sound classes.
Inside the folder “QualityMenu/SoundClasses”, the sound classes and their corresponding
sound mix are included. It is suggested that you use them as a base for your sound system.
26
If you double click a sound wave in content browser, you can select what sound class will
apply to it. You can also set the sound class on a Sound Cue, or override an audio
component.
By default the sound class says “Master”, this is a soundclass included with engine and is
different from SC_Master included with settings project. As a precaution, the settings does
does update volume of both “Master” and “SC_Master” volume, but you should assign your
audio files to a one of the sub categories explained above. If you feel an audio group does
not fit any of the other subclasses, you should make a new one for it.
27
Then select the sound class you want to apply in content browser, find “Sound Class” edit
field in property matrix and press arrow button to use the selected asset from content
browser.
28
5 How to add a new custom setting
A Game Tab is included with the menu. It comes with example components you can build
upon to add your own settings.
In this example, we will add our own custom option to see if player can fall off ledges.
29
In the function list, find the example “My Custom Checkbox” and duplicate the three functions
inside it.
Rename them:
Modify Can Walk Off Ledges
Set Can Walk Off Ledges
Get Can Walk Off Ledges
Open “Modify Can Walk Off Ledges” function. Right Click “Get Class Default” and select
Refresh Nodes” to display the new variable.
30
Replace all references to “My Custom Checkbox” with “Can Walk Off Ledges” variable.
(OOPS: I have been notified of a bug with event dispatchers in unreal 4.14,
Dispatchers can now cause crashes when used with Save Game, See Part 5.4 of
manual for more)
Create a new Event Dispatcher in GameSettings
31
Open function “Set Can Walk Off Ledges”. Replace the variable, the modify function, and
getter result with the relevant “Can Walk Off Ledges” instead of “My Custom Checkbox”.
Open function “Get Can Walk Off Ledges” and replace variable here too.
32
Add “Modify Can Walk Off Ledges” to sequence inside function “Modify All MyCustom
Settings” and connect “Modify” input.
Gamesettings now has a variable that will be saved on disk, applied through event
dispatcher, and revert to a previously stored value if player press cancel on menu.
You see the checkbox is selected in hierarchy, but we want to copy the entire settings row.
33
Find the horizontal box containing the row, and right click to copy it.
Go to the vertical box at the top of the hierarchy, and paste the row there.
Select the text “My CheckBox” and change text to “Can Walk Off Ledges”.
34
Select the checkbox and give it a better name: “CheckBoxWalkOffLedge”.
35
In the new function, replace “My Check Box” with “Check Box Walk Off Ledge”
In the event graph, add “Refresh Can Walk Off Ledges” at the end of “Refresh My Custom
Settings”. Also connect “Get Can Walk Off Ledges” from Game Settings
36
Add event “On Check State Changed” from CheckBoxWalkOffLedge
From the event, set the checked value in “Set Can Walk Off Ledges” from GameSettings.
Call “Refresh Can Walk Off Ledges” with the final value.
As a final touch here, add the new checkbox to the array in event graph. It keeps the tooltip
design consistent among UMG components.
Open up BP_FirstPersonPC (Or your own Player Controller) for the last steps.
37
5.3 Update and Apply BP_FirstPersonBP pawn values
At the end of Event Begin Play sequence. We are going to assign an event to the dispatcher
we made in BP_GameSettings.
(OOPS: I have been notified of a bug with event dispatchers in unreal 4.14,
Dispatchers can now cause crashes when used with Save Game, See Part 5.4 of
manual for more)
From the new event that we now bind to, we get our controlled pawn and cast it to character.
From the character, we get the “Character Movement” component, that has the option to stop
a player from walking off ledges. Retrieve value “Can Walk Off Ledges” from game settings
and update the value. The value is also updated as a part of “BeginPlay” so it updates it state
at least once instead of waiting for player to interact with setting option.
38
Move the player character to an area with a ledge. When you play the game now, you will
stop at the edge, unless you jump over. Open menu, select Game Tab, tick of your new box,
press OK, and you can slide right over the ledge.
Great! You have now added a custom variable that will be saved in settings file, it can be
modified from menu and it will notify character when changed.
If you are running a network game, you have to update “Can Walk Off Ledges” on the server
instance of character for it to work. Create a new event that executes on server and send
users preferred setting.
39
5.4 Workaround Event Dispatcher
Unreal Engine 4.14 has a bug with event dispatchers inside a save game blueprint.
https://issues.unrealengine.com/issue/UE-40448
Create a new Blueprint, and make it an Object Blueprint. (Expand “All Classes” to find it)
40
Go back to BP_GameSettings and make BP_EventDispatcherWorkaround a new variable.
Then construct (create the blueprint) on method Util -> Manage -> Init Save Game Settings.
You can now call and bind to event dispatcher inside BP_EventDispatcher
41
To bind events, grab variable “Event Dispatcher Workaround” from GameSettings
Please vote on the issue so we hopefully don’t have to do this workaround in the future.
https://issues.unrealengine.com/issue/UE-40448
(PS: Don’t forget to actually “Apply” when clicking on your settings button to call event)
42
6 Custom Game Instance
If you are already using your own game instance, you need to add modifications to it to
support settings menu. Open up you blueprint instance class and click on class settings.
Create a variable “Game Settings Wrapper” of class Game Settings Wrapper and return it in
interface function “Get Settings Instance”
Add an execute console command in the interface function “Run Console Command”.
Then, in the event graph, make node “Event Init” and call “Init Game Settings” in it, save the
output in the “Game Settings Wrapper object we made.
43
7 Customize Menu
Game tab includes example buttons and slider you can use to customize your game.
You can read more about Unreal 4 User Interface system on their documentation pages.
Select the Game tab and then click “GameTabSizeBox” in the Hierarchy.
When you run the game, the Game tab will no longer be displayed.
44
7.2 Reorder Game Tab
If you have created many options in the custom game tab, you might want to have it at top
and be displayed by default.
Open up “WB_SettingsMenuMain” blueprint and select “GameTabSizeBox” that the game
tab is contained inside. Use the up and down arrows that shows up on the component. Move
it to the top.
Open the event graph and find default tab to display, change target of “Set Checked State”
into “Tab Game Settings”, and “Set Active Widget Index” to 4
Game tab is now shown at top and enabled by default when menu is opened for the first
time.
45
7.3 Change Color
You can change the color on most components.
Find the object you want to adjust and change the tint.
The tint value might be in different places depending on component. Button tints are are
under styles and have a different tint for all states. (Normal, pressed, hovered and disabled.)
Unreal the connects the .uassets files with the original textures by itself. You are now free to
edit the textures. Unreal will detect changes on your source files and update them.
46
7.5 Change Default Values
You can find most settings on class default inside the GameSettings blueprint. Select Class
Default Button and configure out the list in details panel.
As a shortcut, you can delete the .sav file generated by GameSettings in Dev Tab to see
changes in default values.
Some values are configured DefaultGameUserSettings.ini (See manual 3.11 on how to add
it)
Those values are there to allow some user configurations when GameUserSettings.ini are
created. This is a work in progress, and more default settings will be moved to .ini files later.
For now, you can see manual part 9.1 for supported configurations.
0 = Low, 1 = Medium, 2 = High, 3 = Epic
You can’t see changes in DefaultGameUserSettings.ini when you run game in editor, but it
will work on packaged games.
Select action row containing the mapping and replace default inputs in combination.
Be aware that if you saved your game, it will have stored an input in saved file that will be
loaded when you play your game. So press play and open up “Dev” tab in settings menu to
delete settings save file.
47
7.7 Change Look of Buttons and Components
Select a component and modify its appearance in the details tab.
With some widgets, the visual design is hidden behind in a image component, instead of a
part of the button/text edit component. See the hierarchy and modify the image inside the
overlay component.
To modify multiple widgets at the same time, you can sometimes select multiple components
at once in the hierarchy by ctrl clicking. Most common options are now shared in the details
tab, and you can modify all selected at once.
48
7.8 Implement settings in a main menu
A barebones example main menu is provided in folder “QualityMenu\HUD_UMG_Classic\
BarebonesMainMenu”. It contains 3 blueprints:
So the GameMode creates the player controller, and the player controller creates the menu
widget.
To set up this main menu, create a new empty black level, Open level world settings in
“Window” -> “World Settings”, set its game mode to “ExampleMainMenuGameMode”, and
press play.
Take care to manage “Set Input Mode xxxx” properly when you leave main menu. If not, you
may be unable to move character since player is still in input mode UI only.
Networking in barebones menu is only connect to ip and does not attempt to be any lobby
system, make sure port 7777 is open to use it.
49
7.9 Reorder Keybinding List
Keybinding list that shows up in menu is first ordered by rows in data table, then by
keymappings inside a data table row. You can reorder rows by using the arrows on the top
right of data table, but you manually have to copy/paste elements inside KeyMappings to
reorder them.
You can find output log in menu Window -> Developer Tools -> Output Log
50
Then run “dumpconsolecommands” to get current list of options available.
You have to look it up on the internet to find more information on individual commands, but
documentation can sometimes be a bit sparse. Testing out out in your game in combination
with fps/profiler might give you more information.
The following is less of a tutorial, but shows off how I would learn about commands and how
they would impact the game.
Typing out the command alone gives you its current value.
51
r.VolumetricFog.DepthDistributionScale can have a float number as input. The decimal
number is usually a good sign that you can have a decimal input on the console command.
To see what settings is best for your game, you have to run your game, apply different
commands, and see what looks good for your game, and where you can save frames without
losing too much fidelity on lower end systems. Use profiler and “stat fps” command to help
you.
BP_GameSetting includes a few macros to help you set up a console command with game
settings. Modify Integer/Float/Bool Settings sets and updates console commands.
Section 5 of manual describes how you add new settings to menu. The steps should be very
similar when you modify console commands. In the modify function for your new setting, add
the macro and connect the relevant console command with the current variable, default value
and the revert value (In case player press cancel in menu).
52
Sometimes you have to be careful in what order settings are applied in.
The existing settings like shadow quality/post processing quality/effect quality/anti aliasing
quality is running its own console commands that can override your new commands.
The order of execution depends where you added your “Modify XXX” node in
BP_GameSettings -> Modify All Video Settings.
You can see the default configurations for standard scalability settings in your engine
installation path folder.
(Default path: C:\Program Files\Epic Games\UE_4.XX\Engine\Config\BaseScalability.ini)
Here we can see that the shadow scalability settings indeed does affect volumetric settings.
It is off in low/med, but enabled in high/epic
[ShadowQuality@2]
r.VolumetricFog=1
r.VolumetricFog.GridPixelSize=16
r.VolumetricFog.GridSizeZ=64
These are some gotchas that can show up. It’s a new feature in 4.16, so the online scalability
documentation had not been updated with this information yet.
We can still customize these default settings by creating a new DefaultScalability.ini file in
our projects config folder. See “Customizing Scalability Settings” section of unreal
documentation.
53
https://docs.unrealengine.com/latest/INT/Engine/Performance/Scalability/ScalabilityReferenc
e/
Sometimes a combination of both can be useful, for example, adding a new setting to turn
on/off volumetric, but keep details such as r.VolumetricFog.GridPixelSize,
r.VolumetricFog.GridSizeZ and r.VolumetricFog.DepthDistributionScale as a part of
DefaultScalability.ini file, so it can be controlled by shadow settings.
54
8 Problem solving
8.1 Settings not applied on game start
Game settings are applied when Settings Menu Main is created.
If your game starts up without creating a settings menu, you can apply video settings in one
of your opening blueprints.
Apply game settings can not be not be run from Game Instance class. Console commands
are not executed properly during “Event Init” sequence.
Some settings might be disabled by graphics driver, please check your Nvida or AMD
settings and see if some features are disabled there.
55
8.3 Why is it hexadecimal numbers on AudioUpdateStruct node?
I dont know… it keeps on coming back. You can right click and refresh nodes to make it look
pretty again, but it will return. (4.8 had this issue, it is fixed in 4.9)
56
8.6 Dual monitors
For your game to be displayed across multiple monitors, you need to enable nvidia surround
and have the game in fullscreen. (Borderless fullscreen does not work) I have not tested the
menu on AMD graphics card, I assume AMD eyefinity would work.
Menu can be grabbed and moved in case it’s in the middle of a bezel.
If you want to select what fullscreen you want your game in, drag the game window into your
preferred monitor in window mode and then set it to fullscreen. It should now be on the
correct display.
This could happen when a save file is used on a different build. Delete the savefile in
\Saved\SaveGames and rerun/repackage the game.
If it’s a shipping build, delete the save file inside your appdata.
C:\Users\UserName\AppData\Local\MyGame\Saved\SaveGames\SettingsSaveFile.sav
The name of the settings save file is made when calling “Init Game Settings” in game
instance
57
58
8.10 Issues on Mac/OSX
I have not been able to test the menu myself on a mac. I have received feedback that it
works fine, except for fullscreen mode. (I do not know if this has been fixed in the latest
unreal build)
There is issues with a black bar appearing, and offset mouse coordinates on click.
Borderless fullscreen and windowed mode works fine.
Current workaround is to disable the fullscreen option, and only keep borderless fullscreen
and windowed mode. Open up ClassicSettingsMenuVideoConfig and find the sizebox that
contains RadioBox Fullscreen. Set its visibility to collapsed to hide it. Rename Fullscreen
Borderless into Fullscreen if you so prefer.
59
8.11 Brightness(Gain)/Gamma/Bloom/Field Of view does not work
You need to add a camera manager, see part 3.5 of this manual.
When you have added a camera manager, a PostProcessVolume in world can no longer
modify Color Grading Gamma/Gain, or bloom intensity. The Camera Manager overrides it.
If you want to then change these values on the fly. (Ex a flashbang), you set the values
directly on the camera modifier created for player controller.
60
8.12 Editor Crashes when pressing play
In 4.10, the editor can crash on play after compiling the GameSettings blueprint. This is bug
related to GameInstanceWithSettings not notified by the changed blueprint. If you need to
modify GameSettings, run game as a standalone inside editor.
After you are done modifying GameSettings, save and restart project so you can play the
game in your preferred mode.
Other instances of crashes can often be fixed if modified blueprints are compiled and saved
before pressing play. (Especially character blueprint and action manager)
8.13 Particles stops working when changing quality level (Detail Mode)
There is a bug in the engine where detail mode does not resume play if effect quality is set
down and up again. This only happens when the particle detail mode is modified from default
value. This is fixed in 4.12
See bug report:
https://answers.unrealengine.com/questions/404170/particle-system-lod-does-not-resume-e
mitting-when.html
61
to this issue. To alleviate this problem, view distance is forced to be 1 by default. Any help for
this will be appreciated.
If you only get “Any Key” as an input. You forgot to connect the “Any Key Press” node
properly.
8.17 Dev tab does not hide itself when game is packaged.
Please see that the build configuration is set to Shipping and not Development
62
8.18 Unable to click or interact with settings/HUD is overlapping settings
You might have your own custom HUD components conflicting with menu. Make sure you
have set the ZOrder priority correct when adding widgets to viewport. Higher ZOrder takes
priority over lower.
Until I have found a solution, a workaround can be done by opening up Editor Preference
and Play menu.
Find play in new window and take note of resolution (Or set your own)
The start the game, set settings resolution to same values in windowed mode. Press OK to
save values. You should now be able to playtest in PIE without flickering.
If you need to temporary see how your game behaves in different resolutions and screen
modes, you can start a Standalone Game instead.
63
8.20 Multiple Assets requires re-save on play/Editor slow to start game
This problem was fixed in release 1.5.3, but it could show up again if you modify the settings
system. Macro libraries in Unreal can sometimes cause compiler problems with different
outcomes. If you suspect the settings system to be the culprit, you could replace any
references to “GameSettingsInterface” with a direct reference to your game instance.
I do not know if the error is in my design, or an engine bug, but for now press x twice to close
error message, and open up your conflicting blueprint. Now press compile first, and then you
are allowed to save and run the game just fine. If you can’t compile first, make a small
change in blueprints to make it “dirty”. (I.e. Disconnect and reconnect a node)
64
8.23 Custom list of video resolution
Resolutions are generated from what system supports. To make your own list, open up
WB_ClassingSettingsVideo, and disconnect node “Get Supported Resolutions”. Then select
variable “Video Resolutions” and modify the array of default values.
65
8.25 Forward shading rendering
Settings menu 1.6 has currently not been tested with new forward rendering in release 4.14,
you are free to see what works and what needs to be fixed. I appreciate help if you find
something I need to fix with forward rendering. A later update will be properly tested with
forward rendering.
Fullscreen will work when either when project is packaged, or play the game as standalone.
Other alternatives are running the game in windowed fullscreen, or press f10 for built in
editor fullscreen if game is running in editor viewport.
66
8.28 Third person movement not working as expected
When the camera is behind the player, a slight change in node setup is required. In the
default third person blueprint project, you can reuse “Get Control Rotation” and its
forward/right vector as the world direction for “Add Movement Input”
67
9 Other Features
9.1 GameUserSettings ini file
Some support has been added for reading GameUserSetting.ini file
Supported:
sg.ResolutionQuality
sg.AntiAliasingQuality
sg.ShadowQuality
sg.PostProcessQuality
sg.TextureQuality
sg.EffectsQuality
sg.FoliageQuality
sg.FoliageQuality
bUseVSync
ResolutionSizeX
ResolutionSizeY
FullscreenMode (4.13 only)
Not supported:
sg.ViewDistanceQuality
LastUserConfirmedResolutionSizeX
LastUserConfirmedResolutionSizeY
WindowPosX
WindowPosY
bUseDesktopResolutionForFullscreen
Version
AudioQualityLevel
FrameRateLimit
LastConfirmedFullscreenMode,
FrameRateLimit
DesiredScreenWidth
DesiredScreenHeight
68
9.2 Development options
Included with menu is a tab for development options, it runs some console command that
can help you during development. View Modes are only accessible when testing the game in
editor and does not work in a packaged Development build.
Dev tab is hidden when exported for shipping so it is not displayed in your final game.
69
9.3 Find and Display Keybinding
To get display name from a keybinding, use “Get Keycombination” and then “Get Key
Combination Display Name” to generate string with keybinding.
Separator is used when more then one key is required to activate. Like "L-Ctrl + A"
“No Key Display" is the output if no key has been set to binding.
Display type is the formatting of display name
● Short Ascii replaces some unnecessary long names like "Gamepad Left Thumbstick
Right" into "L-Stick Right"
● Short unicode shrinks it even more by replacing Up/Down/Left/Right/Top/Bottom into
▲▼◀▲, but this is not supported by default textRenderActor (text in 3d space)
● Raw Ascii does not change anything and return full keybinding "Gamepad Left
Thumbstick Right"
It is also possible to be notified when keybinding changes so text fields can be updated.
Assign “Combination updated” to an event.
70
9.4 Optimization
Quality Game Settings attempts to have very little overhead, but as a blueprint only project,
there is no way around using some resources to run a keybinding system.
When using “Action State” inside BP_ActionManager, it checks every frame of binded keys
for that action and analyse if they are pressed/released, and combine mappings for final
value.
For every Action State used, a little more performance is required. A couple of them is fine,
but if you start adding multiple keybinding for walking/driving/plane, it is recommended you
disable non relevant “Action State’s” in different modes, so they don’t add unnecessary
overhead.
You can nativize blueprints in UE 4.15, this gives a significant boost to the keybinding
system.
Creating a “DefaultScalability.ini” configuration file lets you fine tune the quality levels.
See epics own documentation for more details:
https://docs.unrealengine.com/latest/INT/Engine/Performance/Scalability/ScalabilityReferenc
e/#customizingscalabilitysettings
71
72
10 Version Changelog
73
Quality Game Settings 1.5.2 (Unreal 4.11 and 4.12)
● Re-enabled View Distance Scale. Problem is not solved fully, but the few computers
affected by black screen will not experience it on startup, only when changing View
Distance.
● Added barebones Example Main Menu and Character Controller (See manual 7.8)
● Renamed Mouse tab to Camera. It is more correct since camera sensitivity can be
controlled by other input then mouse now.
● Set (some) variables to be read by ini file. (see step 9.1 in manual)
● Feedback said remapping progress bar was a bit slow. Increased its speed about
30%
● No longer needs to add “Make Key Input” on “Any Key Press” node
● The Global Post Process mesh cube and text is now destroyed when game start.
● UNOFFICIAL “LE Extended Standard Library” support. Added example to add sound
class volume control from a marketplace plugin. See step 4.2 in manual. (This is only
provided as a suggested improvement, and I can not help if you have problems
related to it)
https://www.unrealengine.com/marketplace/low-entry-extended-standard-library
● BUGFIX: If save on apply is disabled, keybinding no longer not revert on apply.
● BUGFIX: Keep mouse sensitivity consistent when fps changes.
● BUGFIX: Fix an error message wrongly report missing audio emittors.
● BUGFIX: Quality sliders position was offset when grabbed
● BUGFIX: Window mode did not have title/top bar Edit: Not fixed, got tricked by save
file
74
● Dev tab has been expanded, and includes more options to analyze your
menu.
Renamed all Assets following a style guide.
● Assets has been moved around and renamed. If you want to update to this
version, it is recommended that you remove old menu before re-installing it.
Added Foliage Density Option
● Please make sure foliage has "Enable Density Scaling" activated. Density is
only for foliage without collision.
Disabled Lightmass in demo room (No baked lightning)
● Removes half the size of qualitymenu project, you are free to bake lights on
your own maps.
Fixes
● Fixed mouse cursor symbol properly updating when grabbing menu bar.
● Fixed gray color when attempting to style some edit boxes
11 Credits
UI art menu sounds are modified from the ui pack inside Kenney Game Asset Pack
http://kenney.itch.io/kenney-donation
They are Creative Commons Zero, CC0 and can be used for everything.
I recommend buying that pack for us without an artistic touch.
Also thanks to Epic games for their Unreal Engine with example assets.
75