Singleton class

By implementing the singleton pattern for GameManager, we can easily access it from anywhere using one single point of access. I guess you will feel really confused about this now. A simple example will help you get your head around it.

"In software engineering, the singleton pattern is a design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system."

- Wikipedia

Let's add the following code to the GameManager class. Declare a new public static variable. This code should be written right next to other public variables:

public static GameManager instance;

Then, add an Awake method with the following line.

void Awake() {
  instance = this;
}

That's it! This is all the code you need for a simple access to the GameManager instance from anywhere in your code. It is important to remember that only one instance of this component can be present in the whole Unity Scene. To access any of the public code in GameManager from another class, you can simply call:

GameManager.instance.SomeUsefulMethodOrVariable

For example, if we want to read the currentGameState value from PlayerController, we will simply write:

GameState currentState = GameManager.instance.currentGameState;

I hope the singleton pattern is fairly familiar to you now. Of course, we just covered the basics. Feel free to browse the Internet and read more about the subject.

We have easy access to GameManager, with basic game events helping to control the game. When we press Play in Unity, we can still see that our character is running forward without any control. We are unable to stop him at all. Let's put some restrictions in PlayerController so that the running and jumping behavior works only when currentGameState is .inGame. To do this, let's open PlayerController and add some code:

Singleton class

Lines 22 and 34 are identical. They contain a simple if statement to make the running and jumping functionality work only when currentGameState is inGame. There isn't much more to explain here. Notice how easily we can access the currentGameState due to the singleton approach.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset