Como pausar um jogo na Unity? – Teclado

Existem várias maneiras…

…de se pausar um jogo na Unity, e neste pequeno tutorial vou mostrar em poucos passos como fazer isso. Este tutorial foi dividido em duas partes. Sendo a primeira focada em como pausar usando apenas o teclado e a segunda mostrando um exemplo de como mostrar um painel escrito de que o jogo foi pausado.

Em breve versão em vídeo deste tutorial.

Pausando o jogo pelo Teclado

Para pausar seu jogo utilizando apenas um botão, nesta parte do tutorial utilizaremos a tecla “P” para realizar a ação desejada e criaremos um Script chamado PauseMenu.cs. Nele, vamos utilizar a função Input.GetKeyDown, da própria unity, que verifica quando uma tecla foi pressionada. Com isso, precisaremos especificar para esta função qual a tecla gostaríamos que a unity nos avisasse de que foi pressionada, usando então KeyCode.P para este fim.Conhecendo a função (Input.GetKeyDown) e o parâmetro (KeyCode.P) é possível criar um “if” para então realizar uma ação. Assim como apresentado no código abaixo.

Conhecendo a função (Input.GetKeyDown) e o parâmetro (KeyCode.P) é possível criar um “if” para então realizar uma ação. Assim como apresentado no código abaixo.

// "if" para saber quando a tecla P é pressionada.
if (Input.GetKeyDown(KeyCode.P)) {    
    // Tudo o que estiver dentro deste "if" será executado ao pressionar a tecla P
}

Uma vez que criamos a condição para nossa ação “pausar”, agora podemos focar em como pausar o jogo de fato. Para isso precisamos ter em mente de que a Unity utiliza de Time.timeScale como forma “de controlar a velocidade” do jogo, sendo uma escala normalizada, quando Time.timeScale contém valor 1 o jogo funciona em tempo normal. Caso esse valor seja alterado para 0.5 o jogo passa a funcionar 2x mais lento do que o tempo normal, assim quando valor for 0 (zero) o jogo para por completo.

Considerando que seu jogo trabalha apenas com dois modos de velocidade “normal” e “pausado”, vamos utilizar “ifs” de verificação para estes dois casos. Ou seja, “quando o jogo estiver normal e a tecla P for pressionada, o jogo será pausado” e “quando o jogo já estiver pausado e a tecla P for pressionada, o jogo voltará ao normal.”. Com essas atualizações devemos ter o seguinte código dentro do “if”.

LEMBRE: Caso você esteja fazendo slow motion ou qualquer outra coisa que altere o padrão 0 e 1 essa operação pode não funcionar. Mas se você está fazendo algo assim, possivelmente já sabe como a unity funciona e não precisa deste tutorial.

// "if" para saber quando a tecla P é pressionada.
if (Input.GetKeyDown(KeyCode.P)) {    
    // Tudo o que estiver dentro deste "if" será executado ao pressionar a tecla P
    
    // “quando o jogo já estiver pausado e a tecla P for pressionada, o jogo voltará ao normal.”
    if (Time.timeScale == 0) {
        Time.timeScale = 1;
    } 
    
    // “quando o jogo estiver normal e a tecla P foi pressionada, o jogo será pausado”
    else if (Time.timeScale == 1) {
        Time.timeScale = 0;
    }
}

Agora que entendemos a lógica por trás do código é hora de adicionarmos ele ao nosso script (“PauseMenu.cs”) criado. Para que nosso código funcione da maneira esperada (no momento), ou seja, que em qualquer local do jogo seja possível pausar ao apertar a letra P, é necessário que este código fique dentro da função Update que é rodada a cada frame do seu jogo pela Unity. Com isso, chegamos ao seguinte código:

LEMBRE: A função Update só é chamada caso seu gameObject seja um MonoBehaviour.

 void Update() {
    if (Input.GetKeyDown(KeyCode.P)) {
        if (Time.timeScale == 0) {
            Time.timeScale = 1;
        } else if (Time.timeScale == 1) {
            Time.timeScale = 0;
        }
    }
}

Após estas operações seu jogo deve estar pausando e despausando ao pressionar a tela P…

LEMBRE: Caso não saiba adicionar um script a uma cena de seu jogo unity, siga o tutorial X.

Organizando o código com uma função

Agora, para deixar o nosso código mais organizado e preparado para a próxima parte deste tutorial, que é adicionar uma interface à nossa tela de pause, iremos criar uma função. Uma função serve para muitas coisas, entre elas deixar o código mais organizado e evitar código duplicado caso exista mais de um local realizando a mesma operação. Com isso em mente criaremos uma função chamada “PausarJogo()” a qual não irá receber nenhum parâmetro e dentro dela colocaremos o código que está dentro do nosso “if tecla P for pressionada”, removendo também este código do local atual.

void Update() {
    if (Input.GetKeyDown(KeyCode.P)) {
       
    }
}

void PausarJogo() {
    if (Time.timeScale == 0) {
        Time.timeScale = 1;
    } else if (Time.timeScale == 1) {
        Time.timeScale = 0;
    }
}

Após essa operação, o que devemos fazer é chamar a função “PausarJogo()” no local onde a ação deve ser executada, ou seja, dentro do “if tecla P for pressionada”. Finalizando todas estas operações, nosso código deve estar desta maneira:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PauseMenu : MonoBehaviour {
    void Start() {
         
    }
 
    void Update() {
        if (Input.GetKeyDown(KeyCode.P)) {
            PausarJogo();
        }
    }
 
    void PausarJogo() {
        if (Time.timeScale == 0) {
            Time.timeScale = 1;
        } else if (Time.timeScale == 1) {
            Time.timeScale = 0;
        }
    }
 
}

E agora?

Se o seu objetivo era apenas saber como fazer o seu jogo pausar de uma maneira simples usando o teclado, o tutorial acaba por aqui. Agora, se você gostaria de dar uma interface simples com uma tela escrito “jogo pausado” ao seu projeto, siga o próximo tutorial clicando no card abaixo.

Como pausar um jogo na Unity? – Teclado

Descubra como adicionar uma interface ao nosso comando de pausar um jogo na Unity !
Compartilhe !