Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Criar Menu Principal | Melhore o Jogo
Jogo de Luta no Unity

bookCriar 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?

question mark

O que acontece quando o método FinishGame é chamado na classe GameManager?

Select the correct answer

question mark

O que acontece quando o GameManager altera o estado do jogo para GameStates.Finished?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 3.33

bookCriar 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?

question mark

O que acontece quando o método FinishGame é chamado na classe GameManager?

Select the correct answer

question mark

O que acontece quando o GameManager altera o estado do jogo para GameStates.Finished?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3
some-alt