Tutorials Manager Documentation
Menu
Introduction
This tool is for making gameplay tutorials, tips and comments for the player.
I’ve tried to put tooltips everywhere so make sure you check out each property’s tooltip first!
Support UE4 and UE5 versions
Cross-Platform
Showcase
Demonstration Video
Quick Setup Tutorial
Tutorial Types
Message/Tip
Modal
Setup
After you purchased the plugin make sure you enable it in your project and then do the following steps to get the plugin working
“Show Engine Content” should also be enabled. Now you have access to the plugin content folder.
Feel free to explore the different directories, read the C++ source code if you like (not necessarily) it is filled with comments.
Step 1
First of all, we need to place the BP_TutorialsManager actor in our level.
BP_TutorialsManager: This actor is responsible for managing and triggering the tutorials one by one.
All you need to do is selecting it and drag it to your level:
Step 2
Select the Tutorials Manager actor in your level and then select your pawn as the “Player Pawn” under “Setup” category.
What if you didn't have access to the Pawn in the Beginning? FAQ
In that case you should get a reference of the Tutorials Manager that is placed in your level, you can do it by exposing the manager to the Game Mode or the Game Instance, and then call the SetPlayerPawn function whenever you had access to your pawn.
NOTE
Make sure it’s possessed by a player controller otherwise the plugin won’t work.
Step 3 (For UE5.3+ and EIS Users)
Go to Project Settings -> Engine -> Enhanced Input
Then tick "Enable World Subsystem" and "Enable User Settings" boxes.
Step 4
Play the game now!
Now I will start explaining the other settings.
General Settings
Input System (UE5.1+): You can choose whether you'd like to use Enhanced Input System or Legacy Input System.
EIS is the engine's standard input system after UE5.1 version so it's recommended to use this system for your project.
Tick Types: You can set how frequently your Tutorials Manager tick.
Movement Speed Based: The algorithm will estimate the arrival time of the player based on movement speed and tick based on that. If the player can use vehicles then this might not be the correct choice for you. (Most Optimal/Cheapest)
Fixed Time Interval: It will check the player position in a fixed time range (Cheap)
Every Frame: If the player is super fast and can have crazy speed then you should use it (Most Reliable/Most Expensive)
Max Movement Speed: This should be set to the max possible speed of the player pawn if you’ve chose the “Movement Speed Based” Tick Type.
Tick Time Interval: The Ticking interval of your tutorials manager. If it be a big number then the manager might miss a tutorial point triggering. It’s not recommended to use this tick type.
Enhanced Input Settings (UE5.1+)
If you're not using EIS as the Input System just skip this section.
Input Mapping: You don't need to worry about this one, the plugin uses this input mapping context to handle different inputs in tutorials.
Input Actions: Number of input actions determines how many keys you can map per tutorial if the tutorial completion type is set to "On All Buttons Pressed" or you're using Combinational Keys. You probably won't have more than 6 keys in a single tutorial but if you ever crossed it, make sure you duplicate some IA_TutorialsManager assets and add them to this array.
By the way, you will get a error in output log if you ran out of Input Actions so don't worry about it.
Data Table
Tutorials Data Table: This one is the most important one. All of the tutorials data are set in this table.
This is the Example Project’s tutorials data table, now I will start demonstrating everything for you.
This is a really great example data table; it almost covers all of the plugin’s features.
Tutorial Types
Type: We have 2 types of tutorials.
Modal tutorials will pause the game and are able to show a media to the player, this media can be a movie, texture or a material!
Message tutorials will pop up and display for a certain amount of time without pausing the game.
Title: For the message tutorials title won’t display because of the UI design. You can change the UI design and make use of the Title, but for the modal tutorials Title show up on top of the window as you can see in the image above which the “Jumping” is the Title.
Media (Only Available for Modals): If you’re going to use videos for this, make sure you put all the videos in “Content/Movies” directory of your project otherwise they won’t get packaged with your game!
For the best compatibility and performance, it is recommended to use H.264 encoded MP4 (.mp4) container files.
Content: This is the body of your tutorial and of course the most important part. There are some for this variable which are all written in its tooltip, whenever you forgot the rules just hover over it.
Here’s the rules for Enhanced Input System Users:
If you want to place a key from a mapping context simply type in "{ElementIndex}"
Element Index starts from 0 and it must match the Enhanced Input Setup variable underneath the content.
Elements will get mapped into the content automatically, just be careful with the indices and make sure they're matched with Enhanced Input Setup variable elements!
Combinational Keys: Use + to add them. e.g. {0+2+3...}
You can also use all sort of Triggers and everything should work just fine!
NOTE: Keep in mind that Input Mapping Context Trigger has higher priority, and we only take the first trigger into account.
Here’s the rules for Legacy Input System Users:
If you want to place a key in text type it's like this => " {Action/Axis Name} "
Combinational Keys: Use + to add them. e.g. {ActionName1+ActionName2+ActionName3+...}
Here’s the common rules:
You can also enter key name instead of action name but that would be static! e.g. {Enter}, {Escape}, {Gamepad_FaceButton_Bottom} and etc. Check out the key names list by clicking on 'Print All the Keys' button in the details panel (You should select the world actor in the scene first)
Use "Shift+ Enter" for line breaks
Just be careful about the braces, don't add any extra spaces there and make sure that the open braces match the close ones. There is also a “Check Data Table” button that will analyze the data table and tell you the errors.
If you don’t have the output log, you can bring from Window -> Output Log at the main tab of the engine.
If you have no errors then you should see the following data when you hit "Check Data Table" button.
If you wanted to add static keys to your content make sure you enter the valid key name because sometimes their actual name is not the same as their display name! There is one way to find out, and that is by pressing “Print all the Keys” button.
The text before “:” are the display name of the key/button and the text after that is the actual name (FName) of the key/button.
What we need is the actual name. Example content: Press {W} to move forward.
You can also check out the names by the decorator’s tables, if you head over to "Tutorials Manager Content/UI/KeyMappings" you can find the decorator table of each platform in its directory.
And here’s the table itself:
The last thing you should know about are combinational keys, you can ask player to press 2 or more buttons/keys at the same time and that is done like this: {ActionName1+ActionName2}
There shouldn’t be any space before and after the + sign.
Now let's move on to the next property:
Trigger Types
In Range: The tutorial will show up if the player be within the range of set trigger location
On Crossed: This type works based on the dot product and the location will not matter. Keep in mind that the target point's forward vector is so important.
On Prev Tutorial End: When the previous tutorial ended this tutorial will show up automatically
Manual: You have to call "PopTutorial" function yourself. Get the TutorialsManager's reference and call the function. You can store the reference in GameMode or GameInstance or even in the player character's blueprint!
Please try out the example project or the demo to get a good understanding of all these.
I will explain manual a bit more. If you choose manual the plugin will not trigger the tutorial and you are responsible to trigger it.
Triggering it is fairly simple you have to get a reference of the Tutorials Manager actor of your level and call the PopTutorial function yourself!
Make sure your check out these blueprint functions in the BP_TutorialsManager:
The events will become super handy as well.
Anyway, if you select In Range, these are the settings you’ll get:
You can whether use a Target Point for your tutorial’s location or you can check the Use Manual Vector and input a vector for the trigger location.
Radius: if the player gets closer than the radius to the target location, the tutorial will show up.
Target Points
About the Target Points we have a blueprint actor for them to make them more readable and organized.
The actor’s name will show up on top of them and there will be an icon for you to easily recognize the tutorial points.
Let’s explain the next trigger type now which is On Crossed:
You will only get Target Point for this, there will be no manual vector setup for this one because the rotation of the Target Point matters to determine and calculate the dot product.
Later on, I will explain how you can preview tutorials points trigger area.
“On Prev Tutorial End” and “Manual” Trigger Types won’t come with any additional settings.
Expire Time is the maximum lifetime of the tutorial. (Modal tutorials don’t have this one)
End Types
Let’s talk about the End Type now:
We have 4 different end types.
Auto Expire: The tutorial will be visible till its Expire Time elapses
On Any Button Pressed: The tutorial will hide if the player presses any keys in the tutorial's context
On All Buttons Pressed: The tutorial will hide if the player presses all of the keys in the tutorial's context
Manual: You have to call "LearnedTutorial" function yourself. Get the TutorialsManager's reference and call the function. You can store the reference in GameMode or GameInstance or even in the player character's blueprint!
Manual mode works as same as the Trigger Type.
And the last property, Abandon
If the player goes more far than the abandon radius then the tutorial will be abandoned and abandon action will function.
Abandon radius behaves differently based on the trigger type:
1. On Crossed/In Range: The radius will be calculated from the tutorial's trigger location
2. Manual: The radius will be calculated based on the player's location when this tutorial popped
Of course, negative values mean that the tutorial will never get abandoned.
That was it for the tutorials setup.
Now let’s go back to the tutorials manager’s settings.
Platforms Settings
Now I would like to explain how the cross-platform feature works.
Well, you can add up to 9 custom platforms. We support 6 platforms out of the box.
Target Platform: This is the initial platform that the manager will use! You can change it at runtime or you can just set it by the editor.
Platforms Data: This one is a bit tricky. If you don’t want to add custom platforms just skip this part.
Each platform needs a decorator table for its keys textures that we use for the Rich Text in the UI.
So, if you want to add a new custom platform the first thing you’re going to need is the decorator table.
Then you should set up the Search Expression, your platform keys will be detected by this. You have to find one or more unique phrases that all of your custom platform keys have!
Or you just have to input direct key names, in this case you don’t need the search expression.
As you can see for the Play Station platform we’re using “Gamepad|PS4” search expression, this mean that if any key had “Gamepad” or “PS4” in its actual name (FName) that key belongs to Play Station platform.
Is Gamepad: This will boost the searching speed and skip the unrelated keys. If your custom platform uses a controller then you should check this.
P.S: Due to some copyright issues we had to use alternative names for the platforms.
Blue Console: PlayStation
Green Console: Xbox
V Idx: Valve Index
H Vive: HTC Vive
Ocs Quest: Oculus Quest
UI Settings
You can design your own UI and use it by changing the Tutorial Master Widget Blueprint.
The only thing you should do is to set the widget’s parent to Tutorial Widget
You can change the parent class with the following steps:
Click on Graph
Class Settings
Set Parent Class
Next Tutorial Popping Delay: This delay will execute after a tutorial ended.
Modal Approval Hold Time: The amount of time that the user has to hold down “Enter” or “OKAY” button to get rid of the modal tutorial.
Sounds
These are fairly straight forward.
Optimizations
Destroy on All Tutorials Learned: will destroy the tutorials manager to save some memory after it had nothing else to do! (When there are no other tips/tutorials the manager will stay idle)
If you check this then event will get unbined after they fired.
For example, if you bind 10 events to OnInitialized event, when it fires all of those 10 events will get unbinded and no longer get called when OnInitialized fires.
Debugging & Previewing
Start Row Number: This property has effect if the build isn’t for shipping and what it does is that it will start the tutorials from a custom row, it’s included for the purpose of debugging.
So if you want to display a tutorial all you need to do is find the row number of that tutorial in the data table and set it as Start Row Number and then if you play the game that would be the first tutorial that shows up.
Preview Row Number works exactly the same.
If you can’t see the preview button, it’s because you have to select the tutorials manager actor in the level.
This is a preview of On Crossed trigger type without an abandon radius.
And this is the preview of In Range with abandon radius, the blue sphere is the abandon area:
Congratulations! You've mastered the plugin.
Please rate the product, it won’t take more than 1 minute, but it means a lot for me. Just click the rate button:
Thank you for purchasing the plugin, I hope you enjoy it
Hints
Whenever a feature didn’t work, check out the output log first. You’ll probably find something useful there.
All of the screenshots used in this document are from the example project of the plugin which you can download from the store page.
I tried to set a tooltip for every variable and function in the plugin, so always check the tooltips first.
Combinational is not supported for custom keys (Only action mapping is supported)
Custom keys (Direct Keys like {Enter}) are the cheapest way to show keys
If you had any question after reading this documentation, feel free to send me an email. thekooroshtorabi@gmail.com I will try to answer ASAP
Updates Log
1.4.3 (UE5.2+)
Changes
Minor Improvments
You can now toggle focus on 3D widget in WBP_3DTutorialsWidget blueprint, by turning it off player can move around even if the modal is displaying
Added Next Gen Consoles to plugin's supported platforms
1.4.2 (UE5.1+)
Changes
Code base minor improvements
Packaging issue which icons would become small fixed
1.4 (UE5.1+)
Added
Enhanced Input Full Support
Mouse2D Input Icon
Users Who Owned the Asset Before the Update
You have to set the Input System to Legacy otherwise the plugin will stop working on your project.
Please try converting your project to Enhanced Input System since the Action/Axis mapping system is deprecated. However the plugin will support both systems as long as they're usable inside the engine.
1.3.7
Added
Small delay added to the HideMessage animation
Improved
New parsing system for the tutorials! You no longer need to add spaces before and after action/axis mappings. Write it in whatever way you desire and the plugin will detect it
Fixed
Destroying the player pawn will no longer crash the game
1.3.4
Fixed
Minor bug fixes
1.3.3
Added
Unreal Engine 5.1 Support
New target platforms are now supported
1.3.2
Changed
Action/Axis mappings will only show the primary key now (the first key bindings)
Fixed
"None" keys will no longer show up
1.3.1
Changed
Modals Title text can be localized now
1.3
Added
VR platforms are supported out of the box now!
Supported VR Platforms List: Valve Index, Oculus Quest and HTC Vive.
You can choose key icons theme now, between Dark and Light.
1.2
Added
3D Widgets Support. You can use widget components with TutorialsManager now!
3D widget blueprint version of the main UI to give you an idea of how it should look like
You can mute initial logs now
2 New Events, OnModalShow and OnModalHide
Changed
Error logging system is improved a bit. It tries to avoid useless logs
UI animations minor improvements
3D Widgets Showcase
How to Use the 3D Widget System
Step 1
Set the UI Mode to 3D under UI Settings.
Step 2
Expose your widget component to the Tutorials Manager.
Call the "Set 3D Widget Component" function and everything should work as expected.
Check out the Example Project if you needed more help!
1.1.2
Added
You can now set the "UI ZOrder" through the settings inside TutorialsManager blueprint. It's set to 9999 on default to display on top of every other widgets in order to avoid invisible clicks for the modal tutorials.
Changed
Better UI scale responsiveness.
Fixed
Modal tutorials will no longer lose focus when clicking on somewhere else on the screen.
1.1.1
Changed
SetPlayerPawn() function will initialize the plugin as well now
Fixed
SetPlatform() function blueprint access was accidentally removed, you should be able to access it now again
1.1
Added
Minor optimizations
Functions for getting a particular key texture
Changed
The plugin no longer rebuilds player controller input bindings
Tutorials manager object reference is now accessible via blueprint from tutorials widget
Fixed
Abandoning tutorial will no longer affect the on going visible tutorial
The modal tutorial hide animation will no longer make the visible message tutorial collapse instantly