Menu
CoddyTech

En İyi Koşu

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 32 / 56.

challenge icon

Görev

Orta

Son adım: en iyi koşuyu hatırla. Önceki derslerdeki her şeyi koru. Canvas'ın sağ üst köşesinde bir BestText, panelde ise gizli bir NewBestText (New best!) var; sahne bunları GameManager'ın iki yeni alanına yerleştiriyor: public TMP_Text bestText; ve public GameObject newBestText;. En iyiyi tam metre cinsinden BestRun anahtarı altında kaydet:

  • Start() içinde en iyi sonucu yükle (yeni bir oyuncu için 0) ve Best: 57 m biçiminde göster.
  • GameOver() içinde, koşunun tam metre cinsinden değeri olan Mathf.FloorToInt(distance) en iyi sonucu geçtiğinde yeni en iyi sonucu kaydet, göster ve newBestText'i göster. Daha kısa bir koşu hiçbir şeyi değiştirmez.

En iyi sonuç, yeniden koşarken ve oyundan çıkarken de korunur. Play'e bas, bir en iyi sonuç belirle ve onu geçmeye çalış, ardından Check'e bas.

Kendin dene

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public enum GameState { Playing, GameOver }

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;
    public GameObject gameOverPanel;
    public Button restartButton;
    public GameState state = GameState.Playing;
    private float distance;

    void Awake()
    {
        Instance = this;
    }

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

    void Update()
    {
        if (state != GameState.Playing) return;

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

    public void GameOver()
    {
        state = GameState.GameOver;
        speed = 0f;
        gameOverPanel.SetActive(true);
    }

    void Restart()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler