Menu
CoddyTech

מצבי משחק

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

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

ה-enum מוגדר מחוץ למחלקה, כך שכל סקריפט יכול להשתמש ב-Signal, והסקריפט של הולך הרגל יכול לבדוק את crossing.CanWalk(). שדה enum חדש מתחיל בערך הראשון, שבמקרה הזה הוא Red. ב-Inspector, שדה enum ציבורי מוצג כרשימה נפתחת של הערכים שלו. מתחת לפני השטח, לכל ערך מוקצה מספר שמתחיל ב-0: (int)Signal.Green הוא 2.

challenge icon

אתגר

קל

תנו למעבר הלבה שלושה מצבים.

  1. הצהירו על public enum GameState { Ready, Playing, GameOver } מעל למחלקה GameManager, ועל public GameState state; בתוכה.
  2. ב-Update(), במצב Ready, לחיצה על Space תגדיר את המצב ל-Playing ותציג ביומן את Go!. ב-HitLava(), במצב Playing, הגדירו את המצב ל-GameOver והציגו ביומן את Game over.
  3. בקובץ Player.cs, קראו את מקשי החצים רק כאשר GameManager.Instance.state == GameState.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
    }
}

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

תרגלו בעצמכם: Unity אונליין