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

العب مرة أخرى

الدرس 12 من 14 في دورة لعبة الثعبان ثلاثية الأبعاد في Unity على Coddy.

عندما يموت الثعبان، تظهر لوحة «انتهت اللعبة» مع زر «العب مجددًا». اللوحة موجودة في واجهة المستخدم HUD وتكون مخفية في البداية، ويُظهرها SetActive(true). يعرف الثعبان متى يموت، ويدير GameManager الشاشات، لذا تستدعي Die() الدالة العامة GameOver() في GameManager.

يبدأ زر «العب مجددًا» اللعبة من جديد بتحميل المشهد مرة أخرى. تعود كل الكائنات إلى حالتها في المشهد: الثعبان في خليته الأولى مع جزأين، والنقاط عند 0، واللوحة مخفية. ويُوصَل زر إعادة المحاولة في لعبة سباق بالطريقة نفسها:

void Start()
{
    retryButton.onClick.AddListener(Retry);
}

void Retry()
{
    SceneManager.LoadScene("Track1");
}

التحميل بالاسم يربط الزر بمشهد واحد. المشهد الذي يجري تشغيله هو SceneManager.GetActiveScene().buildIndex، لذا فإن تحميله يعيد تشغيل أي مشهد يوجد فيه الزر. يحتوي المشهد الجديد على GameManager جديد، وتضبط Awake() فيه Instance مرة أخرى، لذا يتواصل الثعبان الجديد مع GameManager الجديد.

challenge icon

التحدي

متوسط

تحتوي واجهة HUD على GameOverPanel مخفي مع PlayAgainButton، ويضبط المشهد كليهما على GameManager.

  1. في GameManager، أضف using UnityEngine.UI; وusing UnityEngine.SceneManagement; وpublic GameObject gameOverPanel; وpublic Button playAgainButton;.
  2. اكتب public void GameOver() لإظهار اللوحة.
  3. اكتب void PlayAgain() لتحميل المشهد النشط مجددًا، واجعل الزر يستدعيها في Start().
  4. في Die() الخاصة بـ Snake، استدعِ GameOver().

اضغط Play، واصطدم، والعب مجددًا، ثم اضغط Check.

جرّب بنفسك

using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Snake snake;
    public GameObject foodPrefab;
    public TMP_Text scoreText;
    private Transform food;
    private int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        scoreText.text = "Score: 0";
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    public bool IsFood(Vector3 cell)
    {
        return cell == food.position;
    }

    public void Eat()
    {
        score++;
        scoreText.text = "Score: " + score;
        MoveFood();
    }

    void MoveFood()
    {
        List<Vector3> free = new List<Vector3>();
        for (int x = -snake.edge; x <= snake.edge; x++)
        {
            for (int z = -snake.edge; z <= snake.edge; z++)
            {
                Vector3 cell = new Vector3(x, 0f, z);
                if (!snake.Occupies(cell))
                {
                    free.Add(cell);
                }
            }
        }
        food.position = free[Random.Range(0, free.Count)];
    }
}
quiz iconاختبر نفسك

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

جميع دروس لعبة الثعبان ثلاثية الأبعاد في Unity