Menu
CoddyTech

ניקוד וחיים

שיעור 9 מתוך 19 בקורס Unity: משחק שובר לבנים של Coddy.

הניקוד והחיים שייכים למסך. בסצנה יש עכשיו Canvas עם שני טקסטים של TextMeshPro בחלק העליון, ScoreText ו-LivesText, וה-GameManager מכיל אותם בשדות מסוג TMP_Text ממרחב השמות TMPro.

המספרים נמצאים בשדות של GameManager, והטקסטים רק מציגים אותם. מתודה אחת מעדכנת את שני הטקסטים לפי השדות, וכל מתודה שמשנה מספר קוראת לה, וכך גם Start(), כדי שהפריים הראשון יציג את הערכים האמיתיים. מונה המטבעות של חנות:

public TMP_Text coinsText;
int coins;

public void AddCoins(int amount)
{
    coins += amount;
    ShowCoins();
}

void ShowCoins()
{
    coinsText.text = "Coins: " + coins;
}

הטקסט משתנה רק כשהמספר משתנה. עדכון שלו בכל Update() ייראה אותו הדבר, אבל ייצור מחרוזת חדשה בכל פריים ללא סיבה.

challenge icon

אתגר

בינוני

הציגו את הניקוד ואת מספר החיים על המסך.

  1. ב־GameManager, הוסיפו using TMPro;, public TMP_Text scoreText; ו־public TMP_Text livesText;
  2. כתבו void ShowHud(): scoreText.text = "Score: " + score; ו־livesText.text = "Lives: " + lives;
  3. קראו ל־ShowHud() בסוף Start, בתוך BrickBroken ובתוך BallLost.

לחצו על „שחק”: הניקוד: 0 ומספר החיים: 3 מוצגים, ומשתנים במהלך המשחק. לאחר מכן לחצו על „בדיקה”.

נסו בעצמכם

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public int rows = 5;
    public int columns = 9;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;
    public int[] rowHits = { 2, 1, 1, 1, 1 };
    public int lives = 3;

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
    }

    void BuildWall()
    {
        float left = -(columns - 1) * spacingX / 2f;
        for (int row = 0; row < rows; row++)
        {
            for (int col = 0; col < columns; col++)
            {
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(rowHits[row]);
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
    }

    public void BallLost(Ball lost)
    {
        lives--;
        lost.ResetToPaddle();
    }
}

כל השיעורים ביחידה Unity: משחק שובר לבנים

תרגלו בעצמכם: Unity אונליין