סקריפט אחד מפעיל את המשחק
חלק מהיחידה בניית משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 12 מתוך 60.
שימו את התוצאה בסקריפט של השחקן, את החיים בסקריפט בריאות ואת בדיקת סיום המשחק בסקריפט שלישי, וכל סקריפט צריך את המספרים של האחרים, כך שכל כלל חדש משפיע על כמה קבצים. משחקי Unity בדרך כלל מרכזים את המספרים האלה בסקריפט אחד, GameManager, שמוצמד ל-GameObject ריק משלו. הוא מנהל את התוצאה, את החיים ואת הכלל שמסיים את המשחק. סקריפטים אחרים רק מדווחים מה קרה באמצעות קריאה למתודות הציבוריות שלו. בדו-קרב הפנדלים הזה הרשת מדווחת על כל שער:
public class GameManager : MonoBehaviour
{
private int goals;
private int shotsLeft = 5;
public void ShotTaken(bool scored)
{
if (shotsLeft == 0) return;
shotsLeft--;
if (scored) goals++;
Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
}
}// Net.cs, על הטריגר של השער
public GameManager game;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Ball")) game.ShotTaken(true);
}הרשת לא יודעת כמה בעיטות נותרו או מתי המשחק מסתיים. היא מדווחת על שער, והמנהל מחליט מה המשמעות; הסקריפט של השוער מדווח על עצירה באמצעות game.ShotTaken(false). כדי לשנות את דו-קרב הפנדלים ל-3 בעיטות, משנים מספר אחד בסקריפט אחד. הבדיקה בראש ShotTaken מונעת מכדור שמתגלגל פנימה אחרי תום הזמן להיספר.
ממלאים את השדה game ב-Inspector באמצעות גרירת אובייקט ה-GameManager אליו, ו-Unity מוצאת את סקריפט ה-GameManager שעל האובייקט הזה. המנהל הוא גם המקום שבו שמים את ה-HUD: כשהוא מחזיק את טקסט התוצאה ואת לוח סיום המשחק, המסך משתנה באותה מתודה שמשנה את המספרים, ואף סקריפט אחר לא נוגע בממשק המשתמש.
אתגר
קלתן ל־GameManager לעקוב אחר הניקוד ומספר החיים.
AddScore(int points): אםgameOverאינו מוגדר, הוסף ל־scoreוהצגScore: 6ב־scoreText.LoseLife(): הפחת 1 מ־livesוהצגLives: 2; כאשר הערך הוא 0, הגדר אתgameOver, הצג אתgameOverPanelוהגדר אתplayer.enabled = false.- ב־
Gemוב־Bomb, כאשרother.CompareTag("Player")מתקיים, קרא ל־game.AddScore(points)או ל־game.LoseLife(), ואז קרא ל־Destroy(gameObject).
לחץ על „שחק” ופגע בשלוש פצצות. לאחר מכן לחץ על „בדיקה”.
נסו בעצמכם
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public TMP_Text scoreText;
public TMP_Text livesText;
public GameObject gameOverPanel;
public Player player;
private int score;
private int lives = 3;
private bool gameOver;
public void AddScore(int points)
{
// הוסף את הנקודות והצג את הניקוד החדש, אלא אם המשחק הסתיים
}
public void LoseLife()
{
// הפחת חיים אחד והצג את מספר החיים שנותרו; כשנותרים 0 חיים, המשחק מסתיים
}
}
כל השיעורים ביחידה בניית משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות2כפתורים ומסכים
כפתורים ו-onClickביטויי למבדהחיבור ב-Inspectorהפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגיםתרגלו בעצמכם: Unity אונליין