Menu
CoddyTech

Conserva tu mejor partida

Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 60 de 64.

Arena Survivor está completo: un Enemy abstracto con dos tipos, IDamageable para cada golpe, oleadas desde un ScriptableObject, objetos recogibles detrás de una interfaz, un HUD que solo escucha y, por último, un guardado JSON de la mejor partida.

challenge icon

Desafío

Intermedio

Guarda la mejor partida en best.json.

  1. En GameManager.cs, añade una clase [System.Serializable] BestRun con los enteros públicos wave y kills.
  2. Start la carga desde best.json en Application.persistentDataPath con JsonUtility, si el archivo existe.
  3. Al terminar la partida, una oleada más alta, o la misma oleada con más eliminaciones, se convierte en la mejor y se guarda; bestText muestra Best: wave 3, 12 kills.

Presiona «Jugar» y cae dos veces: la mejor partida se mantiene. Después, «Comprobar».

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Arquitectura de juegos en Unity

Practica por tu cuenta: Playground de Unity