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