Menu
CoddyTech

Conserver la meilleure tentative

Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 60 sur 64.

Arena Survivor est terminé : un Enemy abstrait avec deux types, IDamageable pour chaque coup reçu, des vagues provenant d’un ScriptableObject, des objets à ramasser derrière une interface, un HUD qui se contente d’écouter et, enfin, une sauvegarde JSON de la meilleure partie.

challenge icon

Défi

Moyen

Conserve le meilleur résultat dans best.json.

  1. Dans GameManager.cs, ajoute une classe [System.Serializable] BestRun avec les entiers publics wave et kills.
  2. Start le charge depuis best.json dans Application.persistentDataPath avec JsonUtility, si le fichier existe.
  3. À la fin de la partie, un nombre de vagues plus élevé, ou le même nombre de vagues avec plus d’éliminations, devient le meilleur résultat et est enregistré ; bestText affiche Best: wave 3, 12 kills.

Appuie sur « Jouer » et fais-toi éliminer deux fois : le meilleur résultat reste enregistré. Puis appuie sur « Vérifier ».

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Architecture de jeu dans Unity

Entraînez-vous par vous-même : Playground Unity