ניקוד וחיים
שיעור 9 מתוך 16 בקורס משחק 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() ייראה אותו הדבר, אבל ייצור מחרוזת חדשה בכל פריים ללא סיבה.
אתגר
בינוני- הוסף
using TMPro;ל־GameManager, ואתpublic TMP_Text scoreTextואתpublic TMP_Text livesText. הסצנה מקשרת בין ScoreText ו־LivesText. - כתוב
void ShowHud():scoreTextמציגScore: 0ו־livesTextמציגLives: 3, עם המספרים הנוכחיים. - קרא ל־
ShowHud()בסוףStart(), ולאחר שהניקוד או מספר החיים משתנים.
לחץ על Play, שבור לבנה, אבד כדור, ואז לחץ על Check.
נסו בעצמכם
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();
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.