حالات اللعبة
جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 14 من 60.
تكون اللعبة في حالة واحدة في كل مرة: انتظار اللاعب، أو قيد التشغيل، أو منتهية. قد ينتهي الأمر بقيمتين منطقيتين مثل 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 بطريقة خاطئة تؤدي إلى خطأ في الترجمة البرمجية، لذا يظهر الخطأ قبل أن تضغط على «العب».
يُصرَّح عن enum خارج الصنف، لذا يمكن لكل نص برمجي استخدام Signal، كما يمكن للنص البرمجي الخاص بأحد المشاة الاستعلام باستخدام crossing.CanWalk(). يبدأ حقل enum جديد بأول قيمة، وهي هنا Red. يظهر حقل enum العام في نافذة Inspector كقائمة منسدلة لقيمه. في الأساس، تكون كل قيمة عددًا يُحتسب بدءًا من 0: قيمة (int)Signal.Green هي 2.
التحدي
سهلامنح عبور الحمم البركانية ثلاث حالات.
- أعلِن
public enum GameState { Ready, Playing, GameOver }فوق الصنف GameManager، وأضِف إليهpublic GameState state;. - في
Update()، عندما تكون الحالة Ready، يجعل Space الحالة Playing ويسجّلGo!. وفيHitLava()، عندما تكون الحالة Playing، عيّن GameOver وسجّلGame over. - في
Player.cs، اقرأ مدخلات مفاتيح الأسهم فقط عندما تكونGameManager.Instance.state == GameState.Playing.
اضغط «العب»: ستنتظر مفاتيح الأسهم الضغط على Space. ثم اضغط «تحقق».
جرّب بنفسك
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مشروع: عدّاء لا نهاية له
ثلاثة مساراتعقبات أمامكتدرّب بنفسك: Playground لـ Unity