Menu
CoddyTech

השלב הושלם

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

משחק עם שלבים צריך דרך לתעד אותם. הטקסט הוא הדרך הפשוטה ביותר: תו אחד לכל לבנה, מחרוזת אחת לכל שורה. במשחק הזה ספרה מייצגת לבנה עם מספר הפגיעות הזה ונקודה מייצגת רווח, והשורות של שלב מופיעות במחרוזת אחת, מופרדות באמצעות /, כך ששלב נכנס בשורה אחת של ה־Inspector. Split('/') מפצלת את המחרוזת למערך של שורות. גינה שנשתלת מתוך טקסט:

string layout = "t.t.t/.ttt.";
string[] rows = layout.Split('/');
for (int row = 0; row < rows.Length; row++)
    for (int col = 0; col < rows[row].Length; col++)
        if (rows[row][col] == 't') Instantiate(treePrefab, new Vector3(col, 0f, -row), Quaternion.identity);

תו ספרה אינו המספר שלה: '3' הוא char שהקוד שלו הוא 51. הקודים של עשר הספרות מסודרים לפי הסדר, ולכן החסרת '0' (קוד 48) נותנת את המספר: '3' - '0' הוא int שערכו 3.

שלב מסתיים כשנשברת הלבנה האחרונה שלו. סופרים: מוסיפים אחד על כל לבנה שנבנית, מחסירים אחד על כל לבנה שנשברת, וכשמגיעים ל־0 השלב הושלם. ספירת הלבנים שעדיין נמצאות בסצנה לא עובדת באותו רגע, כי Destroy ממתינה לסוף הפריים, ולכן הלבנה שנשברת עדיין שם.

challenge icon

אתגר

בינוני

בנו את הלבנים מתוך טקסט. הסצנה ממלאת את levels בשלושה מבנים; הראשון הוא הקיר שיש לכם עכשיו.

  1. ב־GameManager, הסירו את rows, columns ואת rowHits. הוסיפו public string[] levels, את public Ball ball (הסצנה מקשרת את Ball), משתנה int level ומשתנה int bricksLeft.
  2. החליפו את BuildWall() ב־void BuildLevel(int index): היא שומרת את index ב־level ומפצלת את levels[index] לשורות לפי /. עבור כל ספרה c, היא בונה לבנה עם c - '0' פגיעות ומוסיפה 1 ל־bricksLeft; הנקודות נשארות ריקות. השורות ממורכזות ומרווחות כמו קודם. Start() קוראת ל־BuildLevel(0).
  3. ב־BrickBroken, הפחיתו 1 מ־bricksLeft. כשהערך מגיע ל־0, החזירו את הכדור אל המחבט ובנו את השלב הבא; אחרי השלב האחרון מגיע שוב השלב הראשון.

לחצו על Play ופנו שלב אם תוכלו, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;
using TMPro;

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;
    public TMP_Text scoreText;
    public TMP_Text livesText;

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
        ShowHud();
    }

    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;
        ShowHud();
    }

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

    void ShowHud()
    {
        scoreText.text = "Score: " + score;
        livesText.text = "Lives: " + lives;
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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