Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos II / Aula
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:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour {
public int pontuacao;
public float tempo_restante = 60.0f;
public bool finalizado = false;
//Para acessar: GameManager.instancia
public static GameManager instancia;
//Singleton
void Awake(){
if (instancia == null) {
instancia = this;
DontDestroyOnLoad (gameObject);
} else {
Destroy (gameObject);
}
}
void Update() {
tempo_restante -= Time.deltaTime;
if (tempo_restante <= 0f) {
tempo_restante = 0f;
// finalizar o jogo
finalizado = true;
}
}
}
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:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ColetarMoedas : MonoBehaviour {
void OnTriggerEnter(Collider col) {
if (col.CompareTag ("Moeda")) {
Destroy (col.gameObject);
GameManager.instancia.pontuacao++;
}
}
}
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.
Versão 5.3 - Todos os Direitos reservados