Tutorial Master 2 is here!

After more than a year of development, refactoring and design changes, I am proud to present an upcoming update for Tutorial Master 2.0!

Inventory Demo

Follow this link to play an interactive WebGL Demo to understand how Tutorial Master 2 looks like in a final game. You can also watch the video of the demo if you’re on mobile.

Closed BETA!

Before the new version hits the Asset Store, I would like to spend some time testing it. And the best way to test it is with your help guys! Whether you’re just a passer-by or a current owner of Tutorial Master, you can sign-up to participate in BETA. Simply send an email to beta@hardcodelab.com with the following info:

  • Your name (or nickname if you prefer)
  • What is your role in game development (e.g a programmer or an artist)
  • How experienced are you in using Unity (novice, intermediate or advanced)
  • Operating System

What’s New?

Tutorial Master 2.0 has been built from the ground up, designed to be flexible and feature-rich, allowing developers to create tutorials better than before. In this article, we’re going to go through all the changes and additions the new version has to offer.

Terminology Changes

“Frame” which is what a single Tutorial consists of, has been renamed to “Stage”. The new naming is more suitable since every tutorial consists of stages for a player to complete. Other than that, nothing much has changed.

TutorialMasterScript, which was a MonoBehaviour that stored all the tutorial data has now been renamed to TutorialMasterManager.

Major API Changes

Static calls such as tutorial.Start()  has been removed. The previous version relied on a single Tutorial Master GameObject per-scene, which constrained developers to a single scene. The new architecture allows you to have as many Tutorial Master Managers as you want in a single scene!

To make API calls, you would need to access TutorialMasterManager component and make calls from there.

TutorialMasterManager tutorialManager = GetComponent<TutorialMasterManager>();

You can, however, set which tutorial to start playing as soon as your scene loads right from the editor.

Tutorial Master no longer has an option to “remember” which tutorials have been played or finished. Each developer has their method to store and retrieve data (would it be from remote database or a local config file) and I don’t want it to be restricted to PlayerPrefs only, which is why it’s being removed.

Tutorial Master no longer relies on tags. No more clutter in your tags menu!

User Interface

While the new Editor looks close to its predecessor, it works and feels better. Right off the bat, you’ll notice that the inspector editor is split into clearly defined sections, which can be easily folded or expanded.

This is done to reduce the unnecessary clutter while you’re working on creating your tutorials.

While folding sections won’t let you use all functionalities, you can still quickly select Stages or even create one!

You can also see how some folded sections show some crucial information like which Tutorial or Stage you are working on etc. removing a necessity to always have to expand sections to see the information.

The new editor has been built with serialized properties, meaning that TutorialMaster gameobjects can now be saved as prefabs!


In a previous version, you had only one set of events which were invoked everytime any Stage or Tutorial started/stopped. This was unintuitive and required developers to actually handle unique events for each Stage and Tutorial. On top of that, in order to use the events system you had to attach a component separately.

With a new version, each Tutorial and Stage has their own sets of events, allowing you to quickly invoke custom actions!


Triggers (not to be confused with collision triggers) is a new way to determine how can a player proceed to the next stage of the tutorial. It comes with a set of features and can detect key presses, timer, and can even listen to UGUI button click events! You can then determine what should happen should trigger be activated.

You can also add a delay before click events begin to listen for input. You can also add additional behaviour to triggers thanks to OnTrigger event!

Brand new Module System!

New Module system comes with lots of settings to tweak!

Modules are guides that assist your players in what to do at a specific stage of the tutorial.

Unlike in the previous version where you were limited to only 1 type of module per stage, you can now add an unlimited number of modules for every stage!

The new Module system now gives you a robust control over how they’re positioned or even how you want them to be positioned: do you want them to be above a specific UI element? no problem!

But what if you have different parts of UI spread around different Canvases? Simple! You can tell Module which Canvas it should be active in.

But wait, there’s more! Modules can now target non-canvas elements! Woo! Just set target mode to World Space, drag a transform of any GameObject and done!

Arrow Module is tracking Unity Chan 3D Model

You can also constrain your modules’ position to ensure that it always stays within the Canvas.

You don’t need to worry what Canvas Mode you have or what your UI elements anchors are either. It will work r

And of course, with a new module system, we get new modules to work with!

Built-in Pooling System.

You no longer have to worry about manually instantiating modules and assigning them at runtime. All that’s needed to be done is simply assigning a prefab for each module type.

Once the scene starts, pooling system instantiates an optimal number of GameObjects based on how many modules are created in all of the tutorials and reuses them when they’re needed. Everything just works!

Pop-Up Module

Pop-Up is something that most of you would find useful for your tutorials. They’re a combination of text, button and an image which appears on your target Canvas.

As you can see from the image, the Pop-Up Modules support TextMesh Pro. With it being freely available, it’s a must-have asset if you want crispy looking UI text!

Highlighter Module

Highlighter Module with a pulsing effect in action

Highlighter has a special property to take a shape and size based on boundaries of UI element that it targets. It’s a great way to bring a part of GUI to player’s attention.

Arrow Module

While Arrow module has been in Tutorial Master since day 0, you can now tell it to look at a specific transform GameObject if you can’t decide on a specific direction.

Arrow now can look at UI elements

Removed Modules

Background Module

Background Module has been removed from the new version because it had too many problems associated with it, mainly highlighting only specific UI elements, which didn’t work too well for multi-canvased scenes.

Text Module

This was too simplistic and wouldn’t work too well in most environments. It has been removed in favour of a new Pop-Up module.


While most of the effects retain the same functionality, they now have more options to customize your modules’ behaviour.  For example, for “Floating” effect, you can now choose which direction you want a module to float (horizontal, vertical, diagonal etc.)

Aside from that, you can also set the pattern of floating. It could be Sine, Square, Triangle, or you can define your own!

Theree different arrows with three different floating effect patterns.

“Fade In” effect now fades modules with nested UI elements more reliably.

Pop-Up is relatively complicated in comparison to other modules as it can contain a button, text elements and such.

All effects are no longer restricted to specific Modules (for example, only Arrow Module could use Floating effect).

Tutorial Master also introduces a new effect – scale pulsing.

Built-in Localization Support

Tutorial Master now allows you to create multi-lingual tutorials! The language can even be changed at runtime in the middle of a tutorial (how cool is that?) and it’s super simple with the new API.

Right off the bat, you’ll see a section for creating new Languages with English (US) added by default. You can also set which language you wish to be used by default.

Once you have added appropriate languages you’ll be able to see a dropdown of languages in supported Modules.


Audio Source is now set per-stage instead of per GameObject, and, because of that, you can no longer set audio source settings per stage. On top of that, you can determine when to play an audio (whether you want it to be done when stage just has begun or when it ended).

Debug Mode

Built into the editor, debug mode allows you to quickly play or stop a tutorial, as well as traverse between stages without needing to write an additional line of code. Useful when you want to test your tutorials without having to write any code. It also tracks which tutorial it plays, and its progress and even any current timers for a current stage.

Aside from the Debug Mode, now has a flexible logging system, which even lets you filter out specific log types (e.g. you can set to see only error logs and nothing else).

Unity Engine Version Compatibility

At the moment, Tutorial Master 2.0 works with versions 5.5 and above. The aim is to support as many versions as possible with a new internal build pipeline system which is in works.

Compatibility with previous versions

Unfortunately, there is no compatibility with the previous version of Tutorial Master due to a drastic difference between how tutorial data is stored. You will need to remove the old version before importing the new one.

Support Section

You can learn more about Tutorial Master 2.0 features, tips and tricks in a dedicated support section. It will get constantly updated as new features/changes come in.


Tutorial Master 2.0 has been in works for a while and been subject to lots of design changes, overhauls and setbacks, but it’s all finally coming to an end. The new version is more flexible, extensible and is much easier to maintain, meaning more features and bug fixes would be faster to implement.

I would like to thank all customers who have been super patient as well as providing with feature requests.

I hope you will all enjoy using it as much as I enjoyed working on it!

Elmar Talibzade

Owner and moderator of the HardCode Lab

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.