Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos II / Aula

arrow_back Aula 15 - Jogo Farm Coins - Parte 2

Acumulando e Exibindo a Pontuação

Acumulando a Pontuação

Inicialmente, crie um GameObject vazio chamado “GameManager” e adicione nele um novo script também com o nome “GameManager”. Esse script deve ter o seguinte código, igual ao do jogo Polygonal Rescue:

x
1
using System.Collections;
2
using System.Collections.Generic;
3
using UnityEngine;
4
5
public class GameManager : MonoBehaviour {
6
    public int pontuacao;
7
    public float tempo_restante = 60.0f;
8
    public bool finalizado = false;
9
10
    //Para acessar: GameManager.instancia
11
    public static GameManager instancia;
12
13
    //Singleton
14
    void Awake(){
15
        if (instancia == null) {
16
            instancia = this;
17
            DontDestroyOnLoad (gameObject);
18
        } else {
19
            Destroy (gameObject);
20
        }
21
    }
22
23
    void Update() {
24
        tempo_restante -= Time.deltaTime;
25
        if (tempo_restante <= 0f) {
26
            tempo_restante = 0f;
27
            // finalizar o jogo
28
            finalizado = true;
29
        }
30
31
    }
32
33
}
Listagem 2 - Código do GameManager.cs

O script GameManager tem a variável “pontuacao”, que acumula a pontuação atual do jogador; a variável tempo_restante, que guarda quantos segundos restam para finalizar a fase; a variável boelana “finalizado”, que informa se o jogo finalizou ou não; e também a variável “instancia”, que é marcada como static e é do tipo GameManager (o próprio tipo da classe). A variável “instancia” guardará uma referência à única instância do GameManager existente no jogo e capaz de ser acessada diretamente pelo comando GameManager.instancia. O método Awake garante a existência de somente uma instância do GameManager, armazenando sua referência na variável “instancia”, assim como executando o comando DontDestroyOnLoad, o qual indica que o GameManager será mantido na memória mesmo se uma nova cena for carregada (na mudança de fase, por exemplo). O método Update() é responsável por decrementar a variável tempo_restante e setar a variável “finalizado” para true caso o tempo se esgote. Lembrando: esse padrão de projetos que mantém sempre apenas uma instância de uma classe na memória é chamado de Singleton.

Agora precisamos somente fazer uma adaptação no script ColetaMoedas.cs para ele executar o comando GameManager.instancia.pontuacao++ toda vez que uma moeda for coletada.

O código final do ColetaMoedas.cs segue abaixo:

13
1
using System.Collections;
2
using System.Collections.Generic;
3
using UnityEngine;
4
5
public class ColetarMoedas : MonoBehaviour {
6
7
    void OnTriggerEnter(Collider col) {
8
        if (col.CompareTag ("Moeda")) {
9
            Destroy (col.gameObject);
10
            GameManager.instancia.pontuacao++;
11
        }
12
    }
13
}
Listagem 3 - Código do ColetaMoedas.cs acumulando a pontuação no GameManager.

Veja agora um vídeo que mostra como adaptar o sistema de acúmulo de pontuação quando o jogador coleta moedas. Esse sistema também foi criado anteriormente no jogo Farm Coins.

play_circle_filled
Vídeo 02 - Pontuação

Versão 5.3 - Todos os Direitos reservados