Menu
CoddyTech

מצבי משחק

חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 14 מתוך 56.

משחק נמצא בכל פעם במצב אחד: ממתין לשחקן, פועל או הסתיים. שני ערכי bool כמו isPlaying ו-isOver עלולים בטעות להיות true בו-זמנית, ומחרוזת כמו "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.

challenge icon

אתגר

קל

חצו את הרצפה בלי לגעת בלבה. הסקריפט GameManager (סינגלטון) והסקריפט Lava כבר קיימים; הוסיפו למשחק מצבי משחק.

  • בקובץ GameManager.cs, מעל המחלקה, הכריזו על enum בשם GameState עם הערכים Ready, Playing ו־GameOver, בסדר הזה, והוסיפו ל־GameManager שדה ציבורי מסוג GameState בשם state. המשחק מתחיל במצב Ready.
  • כשהמשחק במצב Ready, לחיצה על Space מתחילה אותו: המצב משתנה ל־Playing ונרשם Go!.
  • ה־Lava קורא ל־HitLava(). כשהמשחק במצב Playing, הקריאה מסיימת אותו: המצב משתנה ל־GameOver ונרשם Game over. לחיצה על Space לעולם לא תפעיל מחדש משחק שהסתיים.
  • בקובץ Player.cs, החצים מזיזים את השחקן רק כשהמצב הוא Playing.

לחצו על הפעלה, נסו את החצים לפני Space, ואז לכו אל תוך הלבה, ואז לחצו על בדיקה.

נסו בעצמכם

using UnityEngine;

// הכריזו כאן על ה-enum ‏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
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה בונים משחקים אמיתיים