Menu
CoddyTech

Guarde sua Melhor Partida

Parte da seção Arquitetura de Jogos no Unity do Journey de Unity da Coddy. Lição 60 de 64.

Arena Survivor está completo: um Enemy abstrato com dois tipos, IDamageable para cada acerto, ondas vindas de um ScriptableObject, itens coletáveis por trás de uma interface, um HUD que apenas escuta e, por fim, um salvamento JSON da melhor partida.

challenge icon

Desafio

Médio

Mantenha a melhor partida em best.json.

  1. Em GameManager.cs, adicione uma classe BestRun com o atributo [System.Serializable] e os ints públicos wave e kills.
  2. Start carrega os dados de best.json em Application.persistentDataPath com JsonUtility, se o arquivo existir.
  3. Ao fim do jogo, uma onda mais alta, ou a mesma onda com mais eliminações, torna-se a melhor e é salva; bestText exibe Best: wave 3, 12 kills.

Pressione “Jogar” e morra duas vezes: o recorde permanece. Depois, pressione “Verificar”.

Experimente você mesmo

using System.IO;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;

public class GameManager : MonoBehaviour
{
    [SerializeField] private Hero hero;
    [SerializeField] private WaveSpawner spawner;
    [SerializeField] private GameObject gameOverPanel;
    [SerializeField] private TMP_Text resultText;
    [SerializeField] private TMP_Text bestText;
    [SerializeField] private Button restartButton;

    private int kills;

    void OnEnable()
    {
        hero.Died += GameOver;
        Enemy.Died += CountKill;
    }

    void OnDisable()
    {
        hero.Died -= GameOver;
        Enemy.Died -= CountKill;
    }

    void Start()
    {
        gameOverPanel.SetActive(false);
        restartButton.onClick.AddListener(Restart);
    }

    void CountKill(Enemy enemy)
    {
        kills++;
    }

    void GameOver()
    {
        Time.timeScale = 0f;
        int wave = spawner.Wave;
        resultText.text = "Wave " + wave + ", " + kills + " kills";
        gameOverPanel.SetActive(true);
    }

    void Restart()
    {
        Time.timeScale = 1f;
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Arquitetura de Jogos no Unity

Pratique por conta própria: Playground de Unity