Menu
CoddyTech
flag Ar iconالعربيةdown icon

الاصطدام وإعادة اللعب

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

challenge icon

التحدي

متوسط

يُنهي الاصطدام الجولة، ويبدأ زر جولة جديدة. احتفظ بكل ما أُنجز في الدروس السابقة. تحتوي لوحة الرسم على GameOverPanel مخفية وبداخلها RestartButton مكتوب عليه Run again، ويملأ المشهد حقلين جديدين في GameManager، وهما gameOverPanel وrestartButton. لدى Runner مكوّن Rigidbody حركي، لذا تصله رسائل المشغّلات من العوائق.

في GameManager:

  • فوق الصنف، صرّح عن public enum GameState { Playing, GameOver }، وأضف إلى الصنف حقلًا public GameState state يبدأ بقيمة Playing.
  • أضف using UnityEngine.UI; وusing UnityEngine.SceneManagement; وpublic GameObject gameOverPanel; وpublic Button restartButton;.
  • تضبط الدالة العامة GameOver() قيمة state إلى GameOver، وتضبط speed على 0، ما يوقف كل العوائق، وتُظهر اللوحة.
  • لا تفعل Update() شيئًا إلا إذا كانت الحالة Playing، لذا تتوقف السرعة والمسافة.
  • في Start()، اجعل restartButton يعيد تحميل المشهد الجاري.

في Runner: عند دخوله إلى مُشغّل يحمل الوسم Obstacle، استدعِ GameManager.Instance.GameOver(). عندما لا تكون الحالة Playing، لن تفعل الأسهم شيئًا.

في Spawner: لا تُنشئ أي شيء عندما لا تكون الحالة Playing.

اضغط Play، واصطدم، ثم ابدأ جولة جديدة، وبعدها اضغط Check.

جرّب بنفسك

using UnityEngine;
using TMPro;

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;
    private float distance;

    void Awake()
    {
        Instance = this;
    }

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

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