Menu
CoddyTech

Colidir e Recomeçar

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 31 de 56.

challenge icon

Desafio

Médio

Uma colisão encerra a corrida, e um botão inicia a próxima. Mantenha tudo das lições anteriores. A tela tem um GameOverPanel oculto com um RestartButton rotulado como Run again, e a cena preenche dois novos campos de GameManager, gameOverPanel e restartButton. O Runner tem um Rigidbody cinemático, então recebe mensagens de gatilho dos obstáculos.

Em GameManager:

  • Acima da classe, declare public enum GameState { Playing, GameOver } e dê à classe um campo public GameState state que começa como Playing.
  • Adicione using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; e public Button restartButton;.
  • Um método público GameOver() define state como GameOver, define speed como 0, o que para todos os obstáculos, e mostra o painel.
  • Update() não faz nada a menos que o estado seja Playing, então a velocidade e a distância param.
  • Em Start(), faça com que restartButton recarregue a cena que está em execução.

Em Runner: quando entrar em um gatilho marcado com Obstacle, chame GameManager.Instance.GameOver(). Enquanto o estado não for Playing, as setas não fazem nada.

Em Spawner: não gere nada enquanto o estado não for Playing.

Pressione Play, colida e comece outra corrida, depois Check.

Experimente você mesmo

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public float speed = 10f;
    public float speedUp = 0.5f;
    public float maxSpeed = 20f;
    public TMP_Text distanceText;
    private float distance;

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        speed = Mathf.Min(speed + speedUp * Time.deltaTime, maxSpeed);
        distance += speed * Time.deltaTime;
        distanceText.text = "Distance: " + Mathf.FloorToInt(distance) + " m";
    }
}

Todas as lições de Criando jogos de verdade