הסינגלטון
חלק מהיחידה בניית משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 13 מתוך 60.
הפניה דרך Inspector צריכה אובייקט שאפשר לגרור אליה. אויבים ש־spawner יוצר במהלך המשחק מגיעים מ־prefab, ו־prefab יכול להפנות רק לנכסים ולחלקים של עצמו, לעולם לא לאובייקט בסצנה, ולכן השדה GameManager שלהם ריק. הפתרון המקובל הוא singleton: ה־GameManager שומר את עצמו בשדה שכל סקריפט יכול לגשת אליו באמצעות שם המחלקה.
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
private int kills;
void Awake()
{
Instance = this;
}
public void EnemyDown()
{
kills++;
Debug.Log("Kills: " + kills);
}
}// Enemy.cs, על ה-prefab של האויב
public void Die()
{
GameManager.Instance.EnemyDown();
Destroy(gameObject);
}static פירושו שהשדה שייך למחלקה, ולא לאובייקט. לכל אובייקט GameManager היה kills משלו, אבל במשחק כולו יש רק Instance אחד, וניגשים אליו באמצעות שם המחלקה: GameManager.Instance. כל סקריפט יכול לקרוא אותו, כולל אויב שנוצר לפני דקה, בלי שיהיה לו שדה משלו שצריך למלא.
המנהל מגדיר Instance = this; ב־Awake, כאשר this הוא הסקריפט עצמו. Unity מריצה את כל פעולות Awake בסצנה לפני כל פעולות Start, כך שסקריפטים אחרים יכולים להשתמש ב־GameManager.Instance החל מ־Start שלהם. GameManager שני בסצנה ידרוס את Instance ויציב בו את עצמו; הפרק על סצנות ושלבים מראה איך למנוע זאת.
אתגר
קלאפשר למטאורים להגיע אל GameManager באמצעות סינגלטון.
- ב־
GameManager.cs, הוסףpublic static GameManager Instance;ואתAwake()עםInstance = this;. - ב־
Meteor.cs, מחק את השדהgameוקרא במקום זאת ל־GameManager.Instance.MeteorLanded()ול־GameManager.Instance.MeteorCaught().
לחץ על "שחק" ותפוס מטאור: יוצג Caught: 1, ללא שגיאות במסוף. לאחר מכן לחץ על "בדיקה".
נסו בעצמכם
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public TMP_Text caughtText;
public TMP_Text shieldText;
private int caught;
private int shield = 3;
public void MeteorCaught()
{
caught++;
caughtText.text = "Caught: " + caught;
}
public void MeteorLanded()
{
shield--;
shieldText.text = "Shield: " + shield;
}
}
כל השיעורים ביחידה בניית משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות2כפתורים ומסכים
כפתורים ו-onClickביטויי למבדהחיבור ב-Inspectorהפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגיםתרגלו בעצמכם: Unity אונליין