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

ليلة البقاء

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

يقف أحد الناجين في حقل مظلم، وتأتي الخفافيش لمهاجمته طوال الليل، خفاش جديد كل بضع ثوانٍ من إحدى زوايا الحقل الأربع. يطير كل خفاش مباشرةً نحو الناجي، وأول خفاش يصل إليه ينهي الليل. تحسب ساعة في الأعلى الثواني المتبقية حتى الفجر: اصمد حتى ذلك الحين وستفوز. يجمّد زر الإيقاف المؤقت كل شيء، وعندما ينتهي الليل، تبدأ جولة جديدة بالضغط على «العب مرة أخرى».

كُتب البرنامج النصي Player، الذي يحرّك الناجي باستخدام إجراء Move. اكتب GameManager وBat.

challenge icon

التحدي

صعب

يتيح لك Inspector ضبط GameManager وnightLength (15) وspawnEvery (2) وbatPrefab وspawnPoints (الزوايا الأربع) وdawnText وpauseButton وpausePanel وendPanel وendText وrestartButton.

  • إنه مفردة (singleton) (public static GameManager Instance)، ويحتوي على public enum State متداخل يضم Playing وPaused وWon وLost، وعلى public State state. تبدأ الليلة بحالة Playing.
  • أثناء Playing: يتناقص عدد الثواني المتبقية بدءًا من nightLength، ويُعرض بعد تقريبه إلى الأعلى، مثل Dawn in 12؛ وتظهر خفاشة كل spawnEvery ثانية عند إحدى نقاط spawnPoints، ويتم اختيارها عشوائيًا. عندما ينفد الوقت، تكون نتيجة الليلة Won.
  • يبدّل pauseButton الحالة بين Playing وPaused. توقف Paused وقت اللعبة (Time.timeScale 0) وتُظهر pausePanel؛ وعند العودة إلى Playing، يستأنف الوقت وتُخفى اللوحة. لا يفعل الزر شيئًا في حالتي Won أو Lost.
  • تجعل الدالة العامة Lose() نتيجة الليلة Lost إذا كانت في حالة Playing.
  • توقف حالتا Won وLost وقت اللعبة، وتعرضان endPanel مع ظهور النص You survived the night! أو The bats got you في endText.
  • يبدأ restartButton ليلة جديدة عن طريق إعادة تحميل المشهد.

يتيح لك Inspector ضبط Bat وspeed (2) وreach (1). أثناء حالة Playing، تطير الخفاشة نحو اللاعب (الذي يحمل الوسم Player) بسرعة speed، مع الحفاظ على ارتفاعها. عندما تصبح على مسافة reach من اللاعب على مستوى الأرض، تستدعي Lose().

اضغط Play وحاول الصمود حتى الفجر، ثم اضغط Check.

جرّب بنفسك

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

public class GameManager : MonoBehaviour
{
    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;
}
quiz iconاختبر نفسك

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

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