One of Unity's best features is how easy it is to create amazing UI(User Interface) systems for both video games and enterprise applications. UI allows for easy implementation of showing score, player lives, main menus, and game over screens.
Objective: Create a scoring system that displays points on the screen for every destroyed enemy.
The first thing we need to do is add in a text UI in the Unity editor’s hierarchy:
This will create three things:
- Canvas -this is what makes up the entire UI. Every UI element added will be added to the canvas.
- Text -shows custom text and can be placed anywhere the developer wants on the canvas.
- Event System-this allows for interaction with the UI. Ex. Buttons or sliders.
Make sure to name the text what you want, in this case, Score_text.
And in the text component, type in what you want the text to say, adjust the font and color of the text to your liking.
Now that we have the text, we need to anchor it to the screen's top right. If the game is scaled differently, the text would be outside the screen's bounds.
Using the Rect Transform component, adjust the anchor preset to the top right corner and adjust the X and Y pos values to fit.
Lastly, on the Canvas Scaler switch from “Constant Pixel Size” to “Scale With Screen Size.”
Scale with screen size will always keep the size of the text proportionate to the screen's size.
Now creating the behavior for the Score System. Create an empty game object and script called UI_Manager and open it up.
Now we create a variable for the score in the player script:
We now need to access the “UnityEngine.UI” directive. And add in a Text variable called _scoreText.
This will allow us to now store and call text in a variable, and we can drag in the Score_text into the UI manager.
Now we create a player script method that allows the score to be called elsewhere to add to the score. If the player's laser destroys the enemy, The points from the enemy will be added to the score total in the player script:
The last thing to do is update the score total to the UI in Unity. To do this, we can create a method in the UI Manager Script to have the Text always read “Score: However many points” and call it from the AddScore method in the Player script.