סקריפט אחד מפעיל את המשחק
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 12 מתוך 56.
הכניסו את הניקוד לסקריפט של השחקן, את מספר החיים לסקריפט בריאות ואת בדיקת סוף המשחק לסקריפט שלישי, וכל סקריפט זקוק למספרים של האחרים, כך שכל כלל חדש נוגע בכמה קבצים. משחקי 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: כשהוא מחזיק את טקסט הניקוד ואת לוח סוף המשחק, המסך מתעדכן באותה מתודה שמעדכנת את המספרים, ואף סקריפט אחר לא נוגע בממשק המשתמש.
אתגר
קלציד אבני חן. החצים מזיזים את השחקן (הסקריפט שלו מוכן). אבני חן שוות את מספר ה־points שלהן, פצצות עולות בחיים, ו־GameManager מנהל את הכול. ה־Inspector כבר מקשר את השדה game של כל אבן חן ופצצה לאובייקט GameManager, ואת השדות של GameManager לממשק המשתמש ולשחקן.
בקובץ GameManager.cs:
AddScore(int points)מוסיפה את הנקודות ל־scoreומציגה אותן ב־scoreText, בצורהScore: 6.LoseLife()מפחיתה 1 מ־lives(3 בתחילת המשחק) ומציגה את מספר החיים ב־livesText, בצורהLives: 2.- כאשר
livesמגיע ל־0, המשחק נגמר: מציגים אתgameOverPanelומכבים את הסקריפט של השחקן כדי שהחצים יפסיקו לפעול. לאחר מכן,AddScoreלא משנה דבר.
בקבצים Gem.cs ו־Bomb.cs: כשהשחקן (שמתויג בתג Player) נוגע באחד מהם, הוא מדווח למשחק (אבן חן מדווחת על מספר ה־points שלה, ופצצה על אובדן חיים) ומסיר את עצמו.
לחצו על Play, אספו את אבני החן וגעו בפצצות, ואז לחצו על Check.
נסו בעצמכם
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הפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגים