حالات اللعبة
جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 14 من 56.
تكون اللعبة في حالة واحدة في كل مرة: انتظار اللاعب، أو قيد التشغيل، أو منتهية. قد تصبح قيمتا bool مثل isPlaying وisOver صحيحتين معًا عن طريق الخطأ، كما أن سلسلة نصية مثل "Playng" تُترجم برمجيًا دون خطأ ولا تطابق أبدًا. تحتوي C# على نوع لقائمة ثابتة من الخيارات، وهو enum. يستخدم ضوء عبور المشاة هذا النوع:
public enum Signal { Red, Yellow, Green }
public class Crossing : MonoBehaviour
{
public Signal signal;
void Update()
{
if (signal == Signal.Red && Input.GetMouseButtonDown(0))
{
signal = Signal.Green;
Debug.Log("Walk!");
}
}
public bool CanWalk()
{
return signal == Signal.Green;
}
}ينشئ enum Signal { Red, Yellow, Green } نوعًا جديدًا له ثلاث قيم بالضبط، تُكتب Signal.Red وSignal.Yellow وSignal.Green. يحتفظ الحقل Signal بإحدى هذه القيم في كل مرة؛ وتُجري المقارنة باستخدام == وتغيّر القيمة باستخدام =. يؤدي الخطأ الإملائي في Signal.Gren إلى خطأ في الترجمة البرمجية، لذا يظهر الخطأ قبل أن تضغط على Play.
يُعرَّف enum خارج الصنف، لذا يمكن لكل سكربت استخدام Signal، ويمكن لسكربت أحد المشاة استدعاء crossing.CanWalk(). يبدأ حقل enum جديد بالقيمة الأولى، وهي هنا Red. في Inspector، يظهر حقل enum عام على شكل قائمة منسدلة بقيمه. وتكون قيمة كل خيار في الداخل رقمًا يبدأ العدّ من 0: (int)Signal.Green تساوي 2.
التحدي
سهلاعبر الأرضية دون لمس الحمم. السكريبتان GameManager (وهو مفرد) وLava موجودان؛ أضف حالات اللعبة.
- في
GameManager.cs، فوق الصنف، عرّف تعدادًاGameStateبالقيمReadyوPlayingوGameOverبهذا الترتيب، وأضف إلى GameManager حقلًا عامًا من النوعGameStateاسمهstate. تبدأ اللعبة بحالة Ready. - عندما تكون اللعبة في حالة Ready، يبدأها مفتاح المسافة: تصبح الحالة Playing ويُسجَّل
Go!. - يستدعي الحمم
HitLava(). عندما تكون اللعبة في حالة Playing، ينهي ذلك اللعبة: تصبح الحالة GameOver ويُسجَّلGame over. لا يعيد مفتاح المسافة بدء لعبة انتهت أبدًا. - في
Player.cs، تحرّك الأسهم اللاعب فقط عندما تكون الحالة Playing.
اضغط Play، وجرّب الأسهم قبل الضغط على مفتاح المسافة، ثم امشِ إلى الحمم، ثم اضغط Check.
جرّب بنفسك
using UnityEngine;
// صرّح عن التعداد GameState هنا: Ready, Playing, GameOver
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
// حقل عام من النوع GameState اسمه state
void Awake()
{
Instance = this;
}
void Update()
{
// عندما تكون الحالة Ready، يبدأ Space اللعبة ويسجّل Go!
}
public void HitLava()
{
// عندما تكون الحالة Playing، تنتهي اللعبة: سجّل Game over
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك