Any tips of making an interactive tutorial for games?

I’m building an interactive tutorial for my RTS game at the moment. The first foundation of a Tutorial is done, shown below:

using UnityEngine;
using System.Collections;

namespace Tutorial {
    public class TutorialManager : MonoBehaviour {
        public TutorialInputManager inputManager;
        public TutorialSelection selectionManager;

        public int stateCounter;

        // Use this for initialization
        void Start() {
            this.stateCounter = 0;
            selectionManager.selectionTutorialFlag = false;
            inputManager.selectionTutorialFlag = false;
            inputManager.moveOrderTutorialFlag = false;
            inputManager.attackOrderTutorialFlag = false;
            inputManager.splitTutorialFlag = false;
            inputManager.mergeTutorialFlag = false;
        }

        void OnGUI() {
            switch (this.stateCounter) {
                default:
                case 0:
                    break;
                case 1:
                    selectionManager.selectionTutorialFlag = true;
                    break;
                case 2:
                    selectionManager.selectionTutorialFlag = true;
                    inputManager.selectionTutorialFlag = true;
                    break;
                case 3:
                    selectionManager.selectionTutorialFlag = true;
                    inputManager.selectionTutorialFlag = true;
                    inputManager.moveOrderTutorialFlag = true;
                    break;
                case 4:
                    selectionManager.selectionTutorialFlag = true;
                    inputManager.selectionTutorialFlag = true;
                    inputManager.moveOrderTutorialFlag = true;
                    inputManager.attackOrderTutorialFlag = true;
                    break;
                case 5:
                    selectionManager.selectionTutorialFlag = true;
                    inputManager.selectionTutorialFlag = true;
                    inputManager.moveOrderTutorialFlag = true;
                    inputManager.attackOrderTutorialFlag = true;
                    inputManager.splitTutorialFlag = true;
                    break;
                case 6:
                    selectionManager.selectionTutorialFlag = true;
                    inputManager.selectionTutorialFlag = true;
                    inputManager.moveOrderTutorialFlag = true;
                    inputManager.attackOrderTutorialFlag = true;
                    inputManager.splitTutorialFlag = true;
                    inputManager.mergeTutorialFlag = true;
                    break;
            }
        }
    }
}

These are just Boolean flags that I placed everywhere where I need to introduce functionality to the players who are playing the tutorial. When the flag is set to true, the game will then allow the players to use the functions. (For example: If “moveOrderTutorialFlag” is set to true, game will allow the players to use the “Move” command on the units.)

But this is just a foundation I have in mind programmatically.

I don’t know how to do the tutorial in a visual way. The one hint I know of from gathering feedback from my professor is that “Games that tells the players what to do, do not convey well to the players through text.” and that my game is full of short written texts that the player is very much inclined to ignore.

Any tips on how to go about on this? Thanks in advance.

First make it optional. Some people may be on the 2nd playthrough of your game, and certainly won’t want to be forced to run through it again.

Second, don’t overwhelm the player with too much at once. If you let them know every little feature and mechanic right up front, they simply won’t remember it all.

Look at what StarCraft 2 does. First stage you start off with only the Marines. Second stage you have Marines + Medics, and it just continues slowly building.

And third, people tend to learn best by doing. If they have to create a unit in order to destroy some obstacle in order to advance, then when they do, you’ll know that they know it.

  • It is currently optional. The tutorial is loaded only when the player clicks on the “Tutorial” button in the Main Menu of the game.
  • I also don’t want to overwhelm the player too much, but with only 5 things to say, I couldn’t tell if this is “overwhelming” or “underwhelming”. (Select, Move, Attack, Split, and Merge).
  • My RTS game do not have different units. I only have 1 unit. So, I don’t think building off of it will really help the players. But I do like the “building” part, hence I have written code on that basis (switch…case + incrementing integers).
  • I agree with people learning through doing. I should design it to suit that action so the players are doing it rather than reading the game texts.

Are there any specific code designs that I can use to use the Unity OnGUI() advantage? While experimenting with OnGUI() and Canvas, I found out that I can’t see a lot of text (with background removed) or the view is blocked (with background added in).

  • Dialog boxes tends to block the view. And I don’t know what other ways of not blocking it, but still allow some sentences to be seen clearly to the player.
  • Button interactivity. I am not familiar with structuring dialogs in a way that the player clicks on a button to activate the next dialog, so if there are any resources teaching how to go about this, it would be wonderful.
  • Camera is stationary (like StarCraft 2 and WarCraft 3). Hopefully, this is not limiting the player’s view at all.

Simplify the tutorial as much as possible, try to learn someone who already knows basics but explain as to toddler.
I would recommend to do the SIMPLEST tutorial like how to move, attack, build (troops and buildings) and if there is any other core mechanic. Tutorial should last few fast minutes and actual rest of tutorial add to campaign at start, nobody likes to play tutorials but if they don’t know if it is tutorial and feel like making progress is much better. Rest of tutorial to get the “feel” of the game should be in 1-3 first missions and fairly easy and slowly getting harder.
That is how it should be but at end even slight wrong detail could ruin it, the feel and tuning should be yours to do, so do it fast and simple and rest should be in first missions to learn and meet the player with game without him knowing (so no optional for thoese missions).

I had a lot of success making mini tutorials with a special script containing a coroutine inside the scene that I want to tutorialize. In the script would be public fields to fill in the relevant game objects: camera, player, key points on the map, etc.

Then when you start the level, you call the game manager to see if the tutorial should be shown or not, and if not, have the script delete itself. Otherwise, pause the game and then begin the tutorial coroutine.

The tutorial gameobject tree can have the UI necessary to show notes and graphics overlays, as well as “Next” or “Skip” buttons, and then the coroutine would simply tween and pause and focus and enable and disable stuff over time. It’s pretty slick, once you get the hang of it.

You can even extend this by turning it off (disabled) initially, and then turning it on when the user reaches a point, like his first item pickup, etc.

Ohh! Never thought about using co-routines. That seems very useful in the transitioning of the dialogues/UI.

Do you know what to do with the UI blocking the view? Are there other suggestions for UI layouts? Thanks in advance.