Menu
CoddyTech

Gecenin Sonu

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

Son görev, durumları olan bir yöneticiyi, zamanı durduran bir duraklatma özelliğini, iki sonu ve zaman ölçeğini geri ayarlayan bir yeniden başlatmayı içeren bir oyunu tamamlar.

challenge icon

Görev

Zor

Bir duraklatma, iki bitiş ve yeniden başlatma ekle.

  1. pauseButton yalnızca Playing ve Paused arasında geçiş yapar: Paused, Time.timeScale değerini 0 yapar ve pausePanel öğesini gösterir; Playing ise her ikisini geri alır.
  2. 0 saniyede gece Won olur. Won veya Lost durumunda: zaman ölçeği 0 olur, endPanel gösterilir ve endText içinde You survived the night! veya The bats got you yer alır.
  3. restartButton zaman ölçeğini 1 yapar ve sahneyi yeniden yükler.

“Oyna” düğmesine bas, duraklat, kaybet ve tekrar oyna. Ardından “Kontrol et” düğmesine bas.

Kendin dene

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

public class GameManager : MonoBehaviour
{
    public enum State { Playing, Paused, Won, Lost }

    public static GameManager Instance;

    public float nightLength = 15f;
    public float spawnEvery = 2f;
    public GameObject batPrefab;
    public Transform[] spawnPoints;
    public TMP_Text dawnText;
    public Button pauseButton;
    public GameObject pausePanel;
    public GameObject endPanel;
    public TMP_Text endText;
    public Button restartButton;

    public State state;

    private float timeLeft;
    private float spawnTimer;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        state = State.Playing;
        timeLeft = nightLength;
        ShowDawn();
    }

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

        timeLeft -= Time.deltaTime;
        spawnTimer += Time.deltaTime;
        if (spawnTimer >= spawnEvery)
        {
            spawnTimer -= spawnEvery;
            Transform point = spawnPoints[Random.Range(0, spawnPoints.Length)];
            Instantiate(batPrefab, point.position, Quaternion.identity);
        }
        ShowDawn();
    }

    public void Lose()
    {
        if (state != State.Playing) return;
        state = State.Lost;
    }

    void ShowDawn()
    {
        dawnText.text = "Dawn in " + Mathf.CeilToInt(timeLeft);
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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

Kendi başına pratik yap: Unity playground