Menu
CoddyTech

نهاية الليل

جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 60 من 60.

يُكمل التحدي الأخير لعبةً كاملة: مديرًا ذا حالات، وإيقافًا مؤقتًا يوقف الوقت، ونهايتين، وإعادة تشغيل تعيد مقياس الوقت إلى قيمته السابقة.

challenge icon

التحدي

صعب

أضف إيقافًا مؤقتًا ونهايتين وإعادة تشغيل.

  1. يبدّل pauseButton بين Playing وPaused فقط: عند Paused، تُضبط Time.timeScale على 0 وتُعرض pausePanel، وعند Playing يُعكس الأمران.
  2. عند 0 ثانية، تكون نتيجة الليل Won. عند Won أو Lost: مقياس الوقت 0، وتكون endPanel ظاهرةً، وتعرض You survived the night! أو The bats got you في endText.
  3. يضبط restartButton مقياس الوقت على 1 ويعيد تحميل المشهد.

اضغط «العب»، وأوقف مؤقتًا، واخسر، ثم العب مرة أخرى. بعد ذلك اضغط «تحقق».

جرّب بنفسك

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 iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس إنشاء ألعاب حقيقية

تدرّب بنفسك: Playground لـ Unity