Criar Menu Principal
Menu Principal
Script para o Menu Principal
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainUI : MonoBehaviour
{
public void StatTheGame()
{
SceneManager.LoadScene(1);
}
public void Quit()
{
Application.Quit();
}
}
A classe MainUI
é um script simples que fornece funcionalidades para iniciar o jogo e sair da aplicação. Este script deve ser utilizado com botões de interface de usuário (UI) no Unity.
Definição da Classe e Métodos
O método StatTheGame
foi desenvolvido para iniciar o jogo ao carregar uma nova cena. Especificamente, SceneManager.LoadScene(1)
instrui o Unity a carregar a cena com o índice de build 1
, que corresponde à sua posição nas Configurações de Build.
O método Quit
permite que a aplicação seja encerrada ao chamar Application.Quit()
, embora essa funcionalidade só tenha efeito em uma aplicação compilada e não dentro do Editor do Unity.
Uso no Unity
Anexando o Script
Crie um GameObject (por exemplo, um GameObject vazio ou um elemento de UI).
Anexe o script MainUI
ao GameObject arrastando o script para ele ou utilizando o botão Add Component
no Inspector.
Configurando Botões de UI
Crie um botão de UI (por exemplo, GameObject > UI > Button
).
Selecione o botão e vá até o Inspector.
Na seção On Click ()
, clique no botão +
para adicionar um novo evento.
Arraste o GameObject com o script MainUI
anexado para o campo de objeto.
No menu suspenso, selecione MainUI > functionName
.
Game Manager
Script para Game Manager
public class GameManager : MonoBehaviour
{
public GameStates GameState { private set; get; }
public static event System.Action<GameStates> onGameStateChanges;
public static GameManager instance;
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
}
void Start()
{
GameState = GameStates.Playing;
onGameStateChanges?.Invoke(GameState);
}
public void FinishGame()
{
GameState = GameStates.Finished;
onGameStateChanges?.Invoke(GameState);
}
}
public enum GameStates
{
Playing,
Finished,
}
A classe GameManager
é responsável por gerenciar o estado do jogo. Ela utiliza o padrão singleton para garantir que exista apenas uma instância de GameManager
no jogo, gerencia o estado do jogo e transmite alterações de estado utilizando eventos.
Definição da Classe e Variáveis Membro
Métodos
Método Awake
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
}
Finalidade: Garante que exista apenas uma instância de GameManager
e impede que ela seja destruída ao carregar novas cenas.
Padrão Singleton: Verifica se uma instância já existe. Se sim, destrói o duplicado. Caso contrário, atribui a instância e marca o objeto para não ser destruído ao carregar uma nova cena.
Método Start
void Start()
{
GameState = GameStates.Playing;
onGameStateChanges?.Invoke(GameState);
}
Finalidade: Inicializa o estado do jogo como Playing
quando o jogo começa e aciona o evento onGameStateChanges
.
Método FinishGame
public void FinishGame()
{
GameState = GameStates.Finished;
onGameStateChanges?.Invoke(GameState);
}
Finalidade: Define o estado do jogo como Finished
e aciona o evento onGameStateChanges
.
Enum GameStates
public enum GameStates
{
Playing,
Finished,
}
Finalidade: Define os possíveis estados do jogo.
Inimigo reage às mudanças de estado do jogo
private void GameManager_onGameStateChanges(GameStates state)
{
if (state == GameStates.Finished)
{
stateManager.ChangeState(idle);
}
}
Este método lida com as mudanças de estado do jogo. Quando o estado do jogo muda para Finished
, o estado do inimigo é alterado para idle
.
Painel de Finalização
Script para o Painel de Finalização
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.SceneManagement;
public class FinishPanel : MonoBehaviour
{
[SerializeField] Player player;
[SerializeField] GameObject panel;
[SerializeField] TMP_Text infoText;
private void Start()
{
GameManager.onGameStateChanges += GameManager_onGameStateChanges;
}
private void GameManager_onGameStateChanges(GameStates obj)
{
if (obj == GameStates.Finished)
{
panel.SetActive(true);
OnGameFinished();
}
}
void OnGameFinished()
{
if (player.isDead)
{
infoText.text = "You lost";
infoText.color = Color.red;
}
else
{
infoText.text = "You Won";
infoText.color = Color.green;
}
}
public void BackToMainMenu()
{
SceneManager.LoadScene(0);
}
public void Quit()
{
Application.Quit();
}
}
A classe FinishPanel
gerencia a exibição e a funcionalidade do painel de finalização que aparece ao término do jogo. Este painel fornece um feedback ao jogador sobre se ele venceu ou perdeu, além de oferecer opções para retornar ao menu principal ou sair do jogo.
Explicação
Métodos
Método Start
private void Start()
{
GameManager.onGameStateChanges += GameManager_onGameStateChanges;
}
Finalidade: Inscreve-se no evento GameManager.onGameStateChanges
para escutar alterações no estado do jogo.
Método GameManager_onGameStateChanges
private void GameManager_onGameStateChanges(GameStates obj)
{
if (obj == GameStates.Finished)
{
panel.SetActive(true);
OnGameFinished();
}
}
Finalidade: Gerencia as mudanças de estado do jogo. Quando o estado do jogo é Finished
, ativa o painel de finalização e chama OnGameFinished
.
Método OnGameFinished
void OnGameFinished()
{
if (player.isDead)
{
infoText.text = "You lost";
infoText.color = Color.red;
}
else
{
infoText.text = "You Won";
infoText.color = Color.green;
}
}
Finalidade: Atualiza o texto do painel de finalização com base no estado do jogador (morto ou vivo).
Lógica: Se o jogador estiver morto, o método define o texto como "You lost" em vermelho. Se o jogador estiver vivo, define o texto como "You Won" em verde.
Método BackToMainMenu
public void BackToMainMenu()
{
SceneManager.LoadScene(0);
}
Finalidade: Carrega a cena do menu principal (índice de build 0) quando chamado. Este método deve ser vinculado a um botão na interface do usuário.
Método Quit
public void Quit()
{
Application.Quit();
}
Finalidade: Encerra a aplicação quando chamado. Este método deve ser vinculado a um botão na interface do usuário.
Resumo
A classe FinishPanel
exibe os resultados do final do jogo e oferece opções para retornar ao menu principal ou sair. Ela se inscreve em GameManager.onGameStateChanges
para atualizar adequadamente quando o jogo termina, aprimorando a experiência do usuário com feedback claro e opções intuitivas.
1. O que acontece quando o método FinishGame
é chamado na classe GameManager
?
2. O que acontece quando o GameManager
altera o estado do jogo para GameStates.Finished
?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 3.33
Criar Menu Principal
Deslize para mostrar o menu
Menu Principal
Script para o Menu Principal
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainUI : MonoBehaviour
{
public void StatTheGame()
{
SceneManager.LoadScene(1);
}
public void Quit()
{
Application.Quit();
}
}
A classe MainUI
é um script simples que fornece funcionalidades para iniciar o jogo e sair da aplicação. Este script deve ser utilizado com botões de interface de usuário (UI) no Unity.
Definição da Classe e Métodos
O método StatTheGame
foi desenvolvido para iniciar o jogo ao carregar uma nova cena. Especificamente, SceneManager.LoadScene(1)
instrui o Unity a carregar a cena com o índice de build 1
, que corresponde à sua posição nas Configurações de Build.
O método Quit
permite que a aplicação seja encerrada ao chamar Application.Quit()
, embora essa funcionalidade só tenha efeito em uma aplicação compilada e não dentro do Editor do Unity.
Uso no Unity
Anexando o Script
Crie um GameObject (por exemplo, um GameObject vazio ou um elemento de UI).
Anexe o script MainUI
ao GameObject arrastando o script para ele ou utilizando o botão Add Component
no Inspector.
Configurando Botões de UI
Crie um botão de UI (por exemplo, GameObject > UI > Button
).
Selecione o botão e vá até o Inspector.
Na seção On Click ()
, clique no botão +
para adicionar um novo evento.
Arraste o GameObject com o script MainUI
anexado para o campo de objeto.
No menu suspenso, selecione MainUI > functionName
.
Game Manager
Script para Game Manager
public class GameManager : MonoBehaviour
{
public GameStates GameState { private set; get; }
public static event System.Action<GameStates> onGameStateChanges;
public static GameManager instance;
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
}
void Start()
{
GameState = GameStates.Playing;
onGameStateChanges?.Invoke(GameState);
}
public void FinishGame()
{
GameState = GameStates.Finished;
onGameStateChanges?.Invoke(GameState);
}
}
public enum GameStates
{
Playing,
Finished,
}
A classe GameManager
é responsável por gerenciar o estado do jogo. Ela utiliza o padrão singleton para garantir que exista apenas uma instância de GameManager
no jogo, gerencia o estado do jogo e transmite alterações de estado utilizando eventos.
Definição da Classe e Variáveis Membro
Métodos
Método Awake
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
}
Finalidade: Garante que exista apenas uma instância de GameManager
e impede que ela seja destruída ao carregar novas cenas.
Padrão Singleton: Verifica se uma instância já existe. Se sim, destrói o duplicado. Caso contrário, atribui a instância e marca o objeto para não ser destruído ao carregar uma nova cena.
Método Start
void Start()
{
GameState = GameStates.Playing;
onGameStateChanges?.Invoke(GameState);
}
Finalidade: Inicializa o estado do jogo como Playing
quando o jogo começa e aciona o evento onGameStateChanges
.
Método FinishGame
public void FinishGame()
{
GameState = GameStates.Finished;
onGameStateChanges?.Invoke(GameState);
}
Finalidade: Define o estado do jogo como Finished
e aciona o evento onGameStateChanges
.
Enum GameStates
public enum GameStates
{
Playing,
Finished,
}
Finalidade: Define os possíveis estados do jogo.
Inimigo reage às mudanças de estado do jogo
private void GameManager_onGameStateChanges(GameStates state)
{
if (state == GameStates.Finished)
{
stateManager.ChangeState(idle);
}
}
Este método lida com as mudanças de estado do jogo. Quando o estado do jogo muda para Finished
, o estado do inimigo é alterado para idle
.
Painel de Finalização
Script para o Painel de Finalização
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.SceneManagement;
public class FinishPanel : MonoBehaviour
{
[SerializeField] Player player;
[SerializeField] GameObject panel;
[SerializeField] TMP_Text infoText;
private void Start()
{
GameManager.onGameStateChanges += GameManager_onGameStateChanges;
}
private void GameManager_onGameStateChanges(GameStates obj)
{
if (obj == GameStates.Finished)
{
panel.SetActive(true);
OnGameFinished();
}
}
void OnGameFinished()
{
if (player.isDead)
{
infoText.text = "You lost";
infoText.color = Color.red;
}
else
{
infoText.text = "You Won";
infoText.color = Color.green;
}
}
public void BackToMainMenu()
{
SceneManager.LoadScene(0);
}
public void Quit()
{
Application.Quit();
}
}
A classe FinishPanel
gerencia a exibição e a funcionalidade do painel de finalização que aparece ao término do jogo. Este painel fornece um feedback ao jogador sobre se ele venceu ou perdeu, além de oferecer opções para retornar ao menu principal ou sair do jogo.
Explicação
Métodos
Método Start
private void Start()
{
GameManager.onGameStateChanges += GameManager_onGameStateChanges;
}
Finalidade: Inscreve-se no evento GameManager.onGameStateChanges
para escutar alterações no estado do jogo.
Método GameManager_onGameStateChanges
private void GameManager_onGameStateChanges(GameStates obj)
{
if (obj == GameStates.Finished)
{
panel.SetActive(true);
OnGameFinished();
}
}
Finalidade: Gerencia as mudanças de estado do jogo. Quando o estado do jogo é Finished
, ativa o painel de finalização e chama OnGameFinished
.
Método OnGameFinished
void OnGameFinished()
{
if (player.isDead)
{
infoText.text = "You lost";
infoText.color = Color.red;
}
else
{
infoText.text = "You Won";
infoText.color = Color.green;
}
}
Finalidade: Atualiza o texto do painel de finalização com base no estado do jogador (morto ou vivo).
Lógica: Se o jogador estiver morto, o método define o texto como "You lost" em vermelho. Se o jogador estiver vivo, define o texto como "You Won" em verde.
Método BackToMainMenu
public void BackToMainMenu()
{
SceneManager.LoadScene(0);
}
Finalidade: Carrega a cena do menu principal (índice de build 0) quando chamado. Este método deve ser vinculado a um botão na interface do usuário.
Método Quit
public void Quit()
{
Application.Quit();
}
Finalidade: Encerra a aplicação quando chamado. Este método deve ser vinculado a um botão na interface do usuário.
Resumo
A classe FinishPanel
exibe os resultados do final do jogo e oferece opções para retornar ao menu principal ou sair. Ela se inscreve em GameManager.onGameStateChanges
para atualizar adequadamente quando o jogo termina, aprimorando a experiência do usuário com feedback claro e opções intuitivas.
1. O que acontece quando o método FinishGame
é chamado na classe GameManager
?
2. O que acontece quando o GameManager
altera o estado do jogo para GameStates.Finished
?
Obrigado pelo seu feedback!