ليلة البقاء
جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 56 من 56.
يقف أحد الناجين في حقل مظلم، وتأتي الخفافيش لمهاجمته طوال الليل، خفاش جديد كل بضع ثوانٍ من إحدى زوايا الحقل الأربع. يطير كل خفاش مباشرةً نحو الناجي، وأول خفاش يصل إليه ينهي الليل. تحسب ساعة في الأعلى الثواني المتبقية حتى الفجر: اصمد حتى ذلك الحين وستفوز. يجمّد زر الإيقاف المؤقت كل شيء، وعندما ينتهي الليل، تبدأ جولة جديدة بالضغط على «العب مرة أخرى».
كُتب البرنامج النصي Player، الذي يحرّك الناجي باستخدام إجراء Move. اكتب GameManager وBat.
التحدي
صعبيتيح لك 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.timeScale0) وتُظهر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;
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك