מצבי משחק
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-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.
אתגר
קלחצו את הרצפה בלי לגעת בלבה. הסקריפט 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
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות2כפתורים ומסכים
כפתורים ו-onClickביטויי למבדהחיבור ב-Inspectorהפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגים