Menu
CoddyTech

최고 기록 저장하기

Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 60번째.

Arena Survivor가 완성되었습니다. 추상 Enemy에는 두 가지 종류가 있고, 모든 공격에 IDamageable을 사용하며, ScriptableObject에서 웨이브를 불러오고, 인터페이스를 통해 아이템을 획득하며, HUD는 수신만 하고, 마지막으로 최고 기록을 JSON으로 저장합니다.

challenge icon

챌린지

중급

최고 기록을 best.json에 저장하세요.

  1. GameManager.cs에 BestRun 클래스 [System.Serializable]를 추가하고, 공개 정수 필드 wave와 kills를 선언하세요.
  2. 파일이 있으면 Start에서 Application.persistentDataPath의 best.json을 JsonUtility로 불러오세요.
  3. 게임 오버 시 웨이브가 더 높거나, 웨이브가 같으면서 처치 수가 더 많으면 최고 기록으로 갱신하여 저장하세요. bestText에는 Best: wave 3, 12 kills가 표시됩니다.

‘플레이’를 누르고 두 번 죽어 보세요. 최고 기록은 유지됩니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임 아키텍처의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드